Django模板中未定义STATIC_URL
我有一个模板,叫做 base.html
,这个模板在其他几个模板中被用来显示不同的页面。每个模板的开头都会写上 {% extends "base.html" %}
,表示它们是基于这个基础模板的。在这个基础模板中,我想指定一个静态的样式表,像这样:
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}/base.css"/>
但是,当我渲染大部分模板时,STATIC_URL
的值是空的,所以生成的链接只是 href="/base.css"
,这样就无法加载样式表。对于我连接到默认登录页面的模板,django.contrib.auth.views.login
,这个变量是正确定义的,但在我自己创建的自定义页面中,它却没有定义。
我只是想在开发环境中用 runserver
让这个功能正常工作,所以这个 CSS 文件放在应用的静态子目录下。
以下是我在 settings.py
中相关的设置,都是默认值:
# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
)
在我的 urls.py
中,我也添加了:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
#...
urlpatterns += staticfiles_urlpatterns()
有没有人知道我哪里做错了?据我所知,这应该是开发环境中提供应用特定静态文件的正确做法,参考了 1.3 版本的文档。
4 个回答
你需要把 'django.core.context_processors.request'
加到你的模板上下文处理器里。
你需要在settings.py文件中,把'django.core.context_processors.static'添加到你的TEMPLATE_CONTEXT_PROCESSORS变量里。
也许这能帮到你:
如果在你的模板中 {{ STATIC_URL }} 不起作用,可能是因为你在渲染模板时没有使用 RequestContext。简单来说,上下文处理器会把一些变量添加到每个模板的上下文中。但是,上下文处理器需要你在渲染模板时使用 RequestContext。如果你使用的是通用视图,这个过程会自动进行,但如果是自己写的视图,就需要你手动使用 RequestContext。想了解更多细节,可以查看《子类化上下文:RequestContext》。