STATIC_URL在基本Django模板中未定义

时间:2011-12-02 19:29:42

标签: python django static

我有一个模板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()

任何想法我做错了什么?据我所知,这是基于the 1.3 documentation在开发中提供特定于应用程序的静态文件所应该做的。

4 个答案:

答案 0 :(得分:21)

也许这会有所帮助:

  

如果{{STATIC_URL}}在您的模板中无效,您可能就是这样   在渲染模板时不使用RequestContext。作为简要介绍   复习,上下文处理器将变量添加到每个上下文中   模板。但是,上下文处理器要求您使用   呈现模板时的RequestContext。这会自动发生   你正在使用通用视图,但在手工编写的视图中你需要它   显式使用RequestContext查看它是如何工作的,以及阅读   更多细节,请查看Subclassing Context:RequestContext。

答案 1 :(得分:15)

您需要将'django.core.context_processors.static'添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS变量中。

答案 2 :(得分:0)

您需要将'django.core.context_processors.request'添加到TEMPLATE_CONTEXT_PROCESSORS。

答案 3 :(得分:0)

您可以通过传递

将STATIC_URL添加到模板渲染中
{'STATIC_URL': settings.STATIC_URL} 

或者您可以添加静态上下文处理器,请参阅doc