【问题标题】:Django 1.4 static files problems and don't render at other urls of my projectDjango 1.4 静态文件问题并且不在我项目的其他 url 上呈现
【发布时间】:2012-04-20 00:16:40
【问题描述】:

这是我的设置:

STATIC_ROOT = "/home/tony/Documents/mysite/mysite/"

STATIC_URL = '/static/'

STATICFILES_DIRS = (
"/home/tony/Documents/mysite/mysite/static/",
)

这里我参考了我的样式表(这给了我一个错误):

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/reset.css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/style.css" />

以及日志中的错误:

[06/Apr/2012 13:36:09] "GET /css/reset.css HTTP/1.1" 404 2193
[06/Apr/2012 13:36:09] "GET /css/style.css HTTP/1.1" 404 2193

我认为我是如何解决它的:

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}static/css/reset.css" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}static/css/style.css" />    

它一直有效,直到我换了一个观点-:

from django.shortcuts import render_to_response
from django.template import RequestContext

def test(request):
    return render_to_response('test.html')

在模板中我添加了 {% extends 'base/base.html' %} ,我在日志中得到了什么?这个:

[06/Apr/2012 13:46:55] "GET /test/ HTTP/1.1" 200 964
[06/Apr/2012 13:46:55] "GET /test/static/css/style.css HTTP/1.1" 404 2229
[06/Apr/2012 13:46:55] "GET /test/static/css/reset.css HTTP/1.1" 404 2229

注意 /test/?它不会加载 css。
知道为什么吗?(​​我从来没有遇到过 django1.3 的这个问题)

提前致谢:)

【问题讨论】:

  • 我认为 CSS 应该作为媒体而不是静态文件进入
  • @starcorn:这已经改变了。媒体文件现在是已上传的文件,静态文件是 CSS/JS/图像,它们确实是网站本身的一部分。

标签: python django static-files django-staticfiles django-1.4


【解决方案1】:

您没有使用RequestContext 来呈现您的模板,因此没有运行上下文处理器,因此STATIC_URL 是空的。

【讨论】:

    【解决方案2】:

    首先,以下内容并不能解决您的问题,因为STATIC_URL 应该包含/static/,您不想在任何地方自己写:

    "{{ STATIC_URL }}static/css/reset.css"
    

    现在,如果您的模板中有{{ STATIC_URL }},但模板中没有出现/static/,那么我认为您缺少STATIC_URL 的模板上下文处理器。

    'django.core.context_processors.static' 添加到您的TEMPLATE_CONTEXT_PROCESSORS 设置中。例如,像这样:

    TEMPLATE_CONTEXT_PROCESSORS = (
       'django.core.context_processors.static',
    )
    

    如果TEMPLATE_CONTEXT_PROCESSORS 已经在您的设置文件中,那么您应该将其添加到已经存在的文件中。

    另外,请注意STATIC_URL 以斜线结尾,因此您需要在此处删除{{ STATIC_URL }} 之后的第一个斜线:

    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/css/reset.css" />
    

    最后,您的STATIC_ROOT 很可能不是您想要的。应该是:

    "/home/tony/Documents/mysite/mysite/static/"
    

    这是运行collectstatic 命令时放置静态文件的位置。请参阅 Django 文档中的Managing static files

    【讨论】:

    • 嘿西蒙...我也试过这个 TEMPLATE_CONTEXT_PROCESSORS = ('django.core.context_processors.static', 'django.contrib.auth.context_processors.auth', ) 但它没有工作
    • 但是你确定这不是问题的原因吗?如果您写{{ STATIC_URL }}/css/reset.css,那么应该不可能向/css/reset.css 提出请求。
    • 另外,现在文件的 URL 是什么?浏览器中/static/css/reset.css可以查看吗?
    • 是链接......是的,它向我展示了我的样式表的内容
    • 我的意思是,当你在浏览器的地址栏中添加/static/css/reset.css,比如http://localhost:8000/static/css/reset.css。你能看到那里的文件吗?如果没有,您可以在哪个 URL 下查看该文件(如果有)?
    猜你喜欢
    • 1970-01-01
    • 2012-01-21
    • 2014-11-23
    • 2018-12-24
    • 1970-01-01
    • 2019-03-24
    • 2020-11-06
    • 2012-12-15
    • 2016-11-13
    相关资源
    最近更新 更多