【问题标题】:STATIC_URL undefined in base Django template基本 Django 模板中未定义 STATIC_URL
【发布时间】:2011-12-02 19:29:42
【问题描述】:

我有一个模板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 在开发中为特定于应用程序的静态文件提供服务时应该做的事情。

【问题讨论】:

    标签: python django static


    【解决方案1】:

    也许这会有所帮助:

    如果 {{ STATIC_URL }} 在您的模板中不起作用,您可能 渲染模板时不使用 RequestContext。简而言之 复习,上下文处理器将变量添加到每个上下文中 模板。但是,上下文处理器要求您使用 渲染模板时的 RequestContext。这会自动发生,如果 您正在使用通用视图,但在手工编写的视图中,您需要 显式使用 RequestContext 看看它是如何工作的,并阅读 更多详细信息,请查看子类化上下文:RequestContext。

    【讨论】:

    • 这使我朝着正确的方向前进。 (你引用的部分是here)我没有用context_instance = RequestContext(request) 打电话给render_to_response
    • 不错!很高兴为您提供帮助;)
    • 如果您使用的是 Django 1.3,则无需手动传入 context_instance。渲染快捷方式将为您执行此操作: return render(request, 'the-template.html', {'foo' : 'bar'})
    【解决方案2】:

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

    【讨论】:

    • 在我的情况下,我没有添加 TEMPLATE_CONTEXT_PROCESSORS ,即使我使用的是基于类的使用 RequestContext 的 Generic TemplateView,我需要在我的上下文处理器中使用它,正如你解释的那样拥有 {{STATIC_URL}}填写
    【解决方案3】:

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

    【讨论】:

    • 这似乎并没有改变什么。
    【解决方案4】:

    您可以通过传递将 STATIC_URL 添加到模板渲染中

    {'STATIC_URL': settings.STATIC_URL} 
    

    或者你可以添加静态上下文处理器见doc

    【讨论】:

    • 我有静态上下文处理器,但仅此一项不起作用。
    猜你喜欢
    • 2016-03-11
    • 2012-01-19
    • 2016-11-10
    • 2011-07-24
    • 2011-07-25
    • 2010-10-14
    • 2017-07-29
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多