Django模板中未定义STATIC_URL

10 投票
4 回答
8310 浏览
提问于 2025-04-17 07:34

我有一个模板,叫做 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 个回答

0

你需要把 'django.core.context_processors.request' 加到你的模板上下文处理器里。

15

你需要在settings.py文件中,把'django.core.context_processors.static'添加到你的TEMPLATE_CONTEXT_PROCESSORS变量里。

21

也许这能帮到你:

如果在你的模板中 {{ STATIC_URL }} 不起作用,可能是因为你在渲染模板时没有使用 RequestContext。简单来说,上下文处理器会把一些变量添加到每个模板的上下文中。但是,上下文处理器需要你在渲染模板时使用 RequestContext。如果你使用的是通用视图,这个过程会自动进行,但如果是自己写的视图,就需要你手动使用 RequestContext。想了解更多细节,可以查看《子类化上下文:RequestContext》。

撰写回答