我正在尝试在开发中设置我的静态文件。我的图像位于polls / static / images / banner.jpg中。当我导航到127.0.0.1:8000/时,横幅显示,但当我转到127.0.0.1:8000/2ndpage时,横幅会断开。
我的索引(URL:127.0.0.1:8000 /)模板包含:
{% include 'polls/header.html' %}
横幅http://127.0.0.1:8000/static/images/banner.jpg
的网址我的第二页模板还包含:
{% include 'polls/header.html' %}
但横幅的网址更改为http://127.0.0.1:8000/2ndpage/images/banner.jpg
我的民意调查/ header.html模板:
<img src="{{ STATIC_URL }}images/gcs_banner.jpg" />
urls.py
from django.conf.urls.defaults import patterns, include, url
urlpatterns = patterns('polls.views',
url(r'^$', 'index'),
url(r'^2ndpage/$', '2ndindex'))
views.py
def index(request):
...
return render_to_response('polls/index.html', {'latest_people_list': latest_people_list,}, context_instance = RequestContext(request))
def 2ndpage(request, people_id):
...
return render_to_response('index/detail.html', {'people': p}, context_instance = RequestContext(request))
为什么网址从../static/ ..更改为../ 2ndpage / ..?如何解决这个问题,以便当我使用{%include'polls / header.html'%}时,横幅总会出现?
答案 0 :(得分:3)
我认为在第二页中,{{ STATIC_URL }}
未定义。因此,src以images/gcs_banner.jpg
结束。这是一个相对网址,因为它没有斜杠的前缀。然后使用当前绝对URL将其转换为绝对路径: /2ndpage/images/gcs_banner.jpg 。
{{ STATIC_URL }}
可能是由上下文处理器设置的 - 至少它在我的项目中是如何工作的。的 Context processors are actually a feature from RequestContext 即可。当视图返回没有RequestContext的响应时,上下文处理器不会运行,例如:
from django import shortcuts
# ....
return shortcuts.render_to_response(template_name, context)
这是使用render_to_response() 显式使用RequestContext 的示例:
from django import shortcuts
from django import template
# ....
return shortcuts.render_to_response(template_name, context,
context_instance=template.RequestContext(request))
也就是说,Django 1.3提供了一个更好的快捷方式,隐式使用RequestContext ,render():
from django import shortcuts
# ....
return shortcuts.render(request, template_name, context)