Django:除主页模板外,静态文件映像URL路径中断

时间:2012-03-03 05:51:13

标签: javascript python django file static

我正在尝试在开发中设置我的静态文件。我的图像位于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'%}时,横幅总会出现?

1 个答案:

答案 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)