2012-07-20 91 views
1

我有一個已安裝的應用程序(django_tables2),它有自己的靜態文件文件夾,但我在使用{{ STATIC_URL }}時遇到問題。閱讀Django文檔,如果我跑static_url沒有正確解析,django 1.4

>>> python manage.py findstatic django_tables2/themes/paleblue/css/screen.css 

findstatic確實後正確定位站點包的應用程序目錄中的一個匹配的文件。

我有問題的頁面模板包含:

{% block extrahead %} 
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}django_tables2/themes/paleblue/css/screen.css" /> 
{% endblock %} 

及相關區塊父模板中存在。

本頁面爲http://127.0.0.1:8000/todo/product_groups/Analytical/。但是,在運行開發服務器時,我得到了一個CSS作爲404的指向了錯誤的位置:

GET /todo product_groups/Analytical/django_tables2/themes/paleblue/css/screen.css HTTP/1.1 404 2942 

這是怎麼回事,爲什麼不跟隨{{ STATIC_URL }}服務器一樣findstatic?在進行一些url重新設計之前,我曾經使用過相同的static_url css,但似乎無法使其在新設計中發揮作用。任何幫助或見解將不勝感激。從settings.py

相關片段:

MEDIA_URL = '/media/' 
STATIC_ROOT = 'C:/Users/riedldar/Documents/Code/Arclin/static/' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    "C:/users/riedldar/Documents/Code/Arclin/Arclin/static", 
) 
INSTALLED_APPS = ( 
.... 
'django.contrib.staticfiles',) 

# Required for tables2 
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth", 
"django.core.context_processors.debug", 
"django.core.context_processors.i18n", 
"django.core.context_processors.media", 
"django.core.context_processors.static", 
"django.contrib.messages.context_processors.messages", 
"django.core.context_processors.request", 
) 

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 
'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

從urls.py:

from django.conf.urls import patterns, include, url 
# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 
urlpatterns = patterns('', 
# Examples: 
# url(r'^$', 'Arclin.views.home', name='home'), 
# url(r'^Arclin/', include('Arclin.foo.urls')), 

# Uncomment the admin/doc line below to enable admin documentation: 
url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

# Uncomment the next line to enable the admin: 
url(r'^admin/', include(admin.site.urls)), 

# Todo/Task manager 
url(r'^todo/', include('todo.urls')), 

# Login/out 
url(r'^login/$', 'django.contrib.auth.views.login'), 
url(r'^logout/$', 'Arclin.views.logout_page'), 

# User Homepage 
url(r'^$', 'todo.views.user_home'), 

# 
) 

和待辦事項\ urls.py

from django.conf.urls.defaults import * 
#from models import ProductGroup 

urlpatterns = patterns('', 
    (r'^product_groups/([\w-]+)/$', 'todo.views.items_by_product_group'), 
    url(r'^task/(?P<task_id>\d{1,6})$', 'todo.views.view_task', name='todo_task_detail') 
    ) 

回答

0

todo.views.items_by_product_group是否使用RequestContext或其中一個shortcuts或包含它的通用視圖呈現模板?否則,您的模板上下文處理器將不會應用於將諸如STATIC_URL之類的變量添加到頁面上下文中,從而導致您描述的行爲。另外,Django 1.4引入了一個新的{% static '…' %}模板標籤,它允許您在不需要上下文中的STATIC_URL的情況下引用靜態文件。使用它也應該可以防止這個問題(但是你可能仍然想調查是否或爲什麼RequestContext丟失:這通常是一個錯誤)。

+0

謝謝皮特。你釘了它。我在修改url的時候修改了我的todo.views.items_by_product_group,並從通用視圖切換到常規視圖函數。 – riedldar 2012-07-20 05:00:19

+0

正如你的鏈接所述,我不得不添加'context_instance = RequestContext(request))'作爲render_to_response的參數,一旦我這樣做了'STATIC_URL'被使用。最終返回語句:'return render_to_response('items_by_product_group.html',{'incomplete_table':incomplete_table,'completed_table':completed_table},context_instance = RequestContext(request))''。將看看1.4的新模板標籤。再次感謝! – riedldar 2012-07-20 05:06:44

+0

你可以使用更多的快捷方式:'render(request,template,data)'。這與'render_to_response(template,data,context_instance = RequestContext(request))'的作用相同。 – 2012-07-20 09:20:53