使用Django访问.css文件时出现问题

使用Django访问.css文件时出现问题,css,django,static,Css,Django,Static,我刚从Django开始,在AptanaStudio3中使用PyDev。我使用了有用的Django教程来构建我的简单项目的主干。现在,我正试图使用css进行一些基本的格式化和着色,但已经花了相当长的一段时间 html页面仍然显示良好。它只是没有抓住css(404)。我从控制台知道这一点: [20/Mar/2013 12:41:51] "GET /signup/ HTTP/1.1" 200 306 [20/Mar/2013 12:41:51] "GET /signup/static/signup.c

我刚从Django开始,在AptanaStudio3中使用PyDev。我使用了有用的Django教程来构建我的简单项目的主干。现在,我正试图使用css进行一些基本的格式化和着色,但已经花了相当长的一段时间

html页面仍然显示良好。它只是没有抓住css(404)。我从控制台知道这一点:

[20/Mar/2013 12:41:51] "GET /signup/ HTTP/1.1" 200 306
[20/Mar/2013 12:41:51] "GET /signup/static/signup.css HTTP/1.1" 404 2750
我的文件结构:

Learning
- Learning
--- templates
----- 404.html
----- 500.html
--- _init.py
--- settings.py
--- urls.py
--- wsgi.py
- signup
--- static
----- signup.css
--- templates
----- signup
------- detail.html
------- index.html
------- results.html
----- __init__.py
----- admin.py
----- models.py
----- tests.py
----- urls.py
----- view.py
--- manage.py
--- sqlite.db
--- python
在设置中:

STATIC_ROOT = ''
STATIC_URL = 'static/'
STATICFILES_DIRS = ('')
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
在我的html模板中:

<html>
    <head>
        <title>User List</title>
        <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}signup.css" />
...
有什么见解吗?

  • 您的
    STATIC\u URL
    是一个相对路径(
    STATIC/
    ),这意味着将相对于当前页面搜索所有静态文件。Django的测试服务器不希望出现这种行为,因此静态URL将不匹配,从而触发404错误。您需要将该路径设置为绝对路径,而不是相对于页面的路径(例如,
    /static/

  • 在testserver上使用Django的staticfiles系统时,需要使用
    /manage.py collectstatic

  • 我还强烈建议使用
    {%static'signup.css%}
    语法,而不是
    {{static\u URL}}}signup.css
    。请注意,如果使用此替代格式,则需要在文件的前面某处包含
    {%load static%}

      • 您的
        STATIC\u URL
        是一个相对路径(
        STATIC/
        ),这意味着将相对于当前页面搜索所有静态文件。Django的测试服务器不希望出现这种行为,因此静态URL将不匹配,从而触发404错误。您需要将该路径设置为绝对路径,而不是相对于页面的路径(例如,
        /static/

      • 在testserver上使用Django的staticfiles系统时,需要使用
        /manage.py collectstatic

      • 我还强烈建议使用
        {%static'signup.css%}
        语法,而不是
        {{static\u URL}}}signup.css
        。请注意,如果使用此替代格式,则需要在文件的前面某处包含
        {%load static%}


      您是否运行了
      /manage.py
      ?Django需要将所有静态文件收集到一个目录中,以便使用测试服务器为它们提供服务。另外,请确保将您的
      STATIC\u ROOT
      设置设置为绝对且可写的路径,以便有效地收集文件。有关更多信息,请参阅。另外,请记住,在生产环境中,静态文件应直接由HTTP服务器提供。此外,CSS文件将在路径
      /signup/static/signup.CSS
      处检索,而
      静态URL
      /static/
      。您需要将该路径设置为绝对路径,而不是相对于页面的路径。要么更改为
      href=“/{{STATIC\u URL}}signup.css”
      ,要么使用
      {%STATIC'signup.css%%}
      模板标记,该标记由
      staticfiles
      库提供(更好!)。@pistache(post1),不,我没有运行它。我只是照你的建议做了,没有修好。我马上更新文件结构。@pistache(post2)太棒了!静态URL路径是问题所在。我把它变成绝对的,魔法发生了。非常感谢!(另外,如果你把这个评论作为一个正式的回答,我很乐意接受)@pistache这是不正确的,collectstatic只用于部署,而不是开发。你运行了
      /manage.py collectstatic
      ?Django需要将所有静态文件收集到一个目录中,以便使用测试服务器为它们提供服务。另外,请确保将您的
      STATIC\u ROOT
      设置设置为绝对且可写的路径,以便有效地收集文件。有关更多信息,请参阅。另外,请记住,在生产环境中,静态文件应直接由HTTP服务器提供。此外,CSS文件将在路径
      /signup/static/signup.CSS
      处检索,而
      静态URL
      /static/
      。您需要将该路径设置为绝对路径,而不是相对于页面的路径。要么更改为
      href=“/{{STATIC\u URL}}signup.css”
      ,要么使用
      {%STATIC'signup.css%%}
      模板标记,该标记由
      staticfiles
      库提供(更好!)。@pistache(post1),不,我没有运行它。我只是照你的建议做了,没有修好。我马上更新文件结构。@pistache(post2)太棒了!静态URL路径是问题所在。我把它变成绝对的,魔法发生了。非常感谢!(另外,如果你把这个评论作为一个正式的回答,我会很高兴地接受它)@pistache这是不正确的,collectstatic只是用于部署,而不是开发。这对我来说有点夸张。Django文档建议使用staticfiles模块,在我看来,因为这是标准的方法,所以您应该这样做。当然,结果是一样的,但我喜欢约定和清晰。顺便说一下,您的编辑是一个非常好的主意(特别是因为缺少
      {%load staticfiles%}
      导致的错误根本不明确)。我还没来得及接受它,它就被其他用户拒绝了,这表明有多少用户在审查编辑内容时没有查看。我会自己加的,谢谢。这对我来说有点夸张。Django文档建议使用staticfiles模块,在我看来,因为这是标准的方法,所以您应该这样做。当然,结果是一样的,但我喜欢约定和清晰。顺便说一下,您的编辑是一个非常好的主意(特别是因为缺少
      {%load staticfiles%}
      导致的错误根本不明确)。我还没来得及接受它,它就被其他用户拒绝了,这表明有多少用户在审查编辑内容时没有查看。我自己加上,谢谢。
      def ip_address_processor(request):
          return {'ip_address': request.META['REMOTE_ADDR']}
      def index(request):
          user_list = User.objects.order_by('name')[:5]
          template = loader.get_template('signup/index.html')
          context = RequestContext(
                                   request,
                                   {'user_list': user_list,},
                                   [ip_address_processor])
          return HttpResponse(template.render(context))