2011-12-02 70 views
10

我有一個模板,base.html,在其他幾個模板中用於各種視圖。每個模板都以相應的{% extends "base.html" %}開頭。在基本模板,我想正是如此指定靜態樣式表:STATIC_URL在基礎Django模板中未定義

<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

回答

21

也許這可以幫助:

如果{{STATIC_URL}}是不是在你的模板工作,你可能 渲染template.As短暫 複習,上下文處理器在不使用的RequestContext將變量添加到每個 模板的上下文中。但是,上下文處理器要求您在呈現模板時使用RequestContext。如果 使用的是通用視圖,但是在手動編寫的視圖中,您將需要使用 來明確使用RequestContext。要了解它的工作方式並閱讀 更多詳細信息,請查看Subclassing Context:RequestContext。

+2

這使我朝着正確的方向前進。 (你引用的部分是[here](https://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext))我沒有調用'render_to_response' context_instance =的RequestContext(請求)'。 – UltraNurd

+0

不錯!很高興爲您提供幫助;) – danihp

+2

如果您使用的是Django 1.3,則無需手動傳入context_instance。渲染快捷方式將爲您執行此操作:return render(request,'the-template.html',{'foo':'bar'}) – Brandon

0

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

+0

這似乎沒有改變任何東西。 – UltraNurd

0

您可以再補充STATIC_URL對模板,通過傳遞

{'STATIC_URL': settings.STATIC_URL} 

渲染,或者你可以添加靜態背景處理器看到doc

+0

我有靜態上下文處理器,但是那一項工作不正常。 – UltraNurd

15

您需要添加「django.core.context_processors.static」到settings.py中的TEMPLATE_CONTEXT_PROCESSORS變量。

+0

非常感謝你,@nicolas! – benesch

+0

在我的情況下,我沒有添加TEMPLATE_CONTEXT_PROCESSORS,儘管我使用的是基於類的使用RequestContext的Generic TemplateView,但我需要在我的上下文處理器中使用這個處理器,因爲您解釋爲{{STATIC_URL}}填充 – harijay