我在我的一个模板中使用了STATIC_URL,如果我使用一个url它会正常工作,如果我使用另一个url则会失败。在这两种情况下,使用完全相同的模板运行完全相同的视图。
模板代码:
<link href="{{ STATIC_URL }}css/form.css" type="text/css" rel="stylesheet" />
<!-- rest of page... -->
查看代码:
def myform(request):
if request.method == 'POST':
form = MyForm(request.POST, request.FILES)
obj = save_form(form)
if obj:
send_confirmation_email(obj)
return redirect('done-page')
else:
form = MyForm()
return render(request, 'template.html', {'form': form,})
网址
# site urls.py
urlpatterns = patterns('',
url(r'^$', 'site.app.views.myform'),
url(r'^app/', include('site.app.urls'),
#...
)
# app urls.py
urlpatterns('site.app.views',
url(r'^$', 'myform'),
#...
)
以上是我的django网站的片段。如果通过“mydomain.com/”(站点索引)访问该页面,则会正确呈现STATIC_URL并正确链接css文件。如果通过“mydomain.com/app/”(应用程序的索引)访问该页面,则STATIC_URL变为空白,因此没有css,但页面的其余部分正确呈现。
我的印象是,如果视图和模板相同,则网址应该是无关紧要的。我错过了什么吗?无论使用哪个URL,我必须更改什么才能允许STATIC_URL正确呈现?
答案 0 :(得分:2)
我发现很难相信STATIC_URL
“变成空白”。除非从STATIC_URL
字面上没有价值的时间缓存违规视图响应,否则没有合理的理由。如果您正在使用视图或模板缓存,请确保删除缓存,或类似的重新启动memcached(或其他)。如果您正在开发并使用runserver
,请重新启动runserver
。
另一种更可能出现的情况是,STATIC_URL
不以/
为前缀,即只有static/
。这将在主页上链接到CSS文件/static/css/forms.css
(应该如此),但在另一页上它将是/app/static/css/forms.css
,这显然是不正确的。
答案 1 :(得分:2)
只是在这里猜测,但可能是因为您没有在视图中传递ContextObject
。所以要解决这个问题,你可以这样做:
from django.template import RequestContext
...
def myform(request):
...
return render(request, 'template.html', {'form': form,}, context_instance=RequestContext(request))
否则,STATIC_URL
变量将不会传递给模板,并且如您所述,为空白。我还假设您已在Context Processors设置中使用此功能:
django.core.context_processors.static
答案 2 :(得分:0)
我发现了错误。发生了奇怪的行为,因为这是以前构建的django站点的副本。我忽略了app / urls.py中urlpatterns的第一个参数,让代码指向旧版本。不幸的是,该代码存在于同一个盒子中,并且位于python路径上。因此,这个错误未能引起异常,而是犯了一些我不期待的事情。
实际情况如下:
# site_copy urls.py
urlpatterns = patterns('',
url(r'^$', 'site_copy.app.views.myform'),
url(r'^app/', include('site_copy.app.urls'),
#...
)
# site_copy/app urls.py
urlpatterns('site.app.views',
url(r'^$', 'myform'),
#...
)
谢谢大家的帮助。