static_url没有正确解析,django 1.4
问题描述:
我有一个已安装的应用程序(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')
)
答
是todo.views.items_by_product_group
是否使用RequestContext或其中一个shortcuts或包含它的通用视图呈现模板?否则,您的模板上下文处理器将不会应用于将诸如STATIC_URL
之类的变量添加到页面上下文中,从而导致您描述的行为。另外,Django 1.4引入了一个新的{% static '…' %}
模板标签,它允许您在不需要上下文中的STATIC_URL
的情况下引用静态文件。使用它也应该可以防止这个问题(但是你可能仍然想调查是否或为什么RequestContext丢失:这通常是一个错误)。
谢谢皮特。你钉了它。我在修改url的时候修改了我的todo.views.items_by_product_group,并从通用视图切换到常规视图函数。 – riedldar 2012-07-20 05:00:19
正如你的链接所述,我不得不添加'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
你可以使用更多的快捷方式:'render(request,template,data)'。这与'render_to_response(template,data,context_instance = RequestContext(request))'的作用相同。 – 2012-07-20 09:20:53