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

Django: static file image URL paths breaks except for main page template

本文关键字:文件 静态 图像 URL 中断 路径 主页 Django      更新时间:2023-09-26

我正试图在开发中设置我的静态文件。我有一张图片位于polls/static/images/banner.jpg中。当我导航到127.0.0.1:8000/时,横幅会出现,但当我转到127.0.0.1:8000/2dpage时,横幅就会断裂。

我的索引(URL:127.0.0.1:8000/)模板包含:

{% include 'polls/header.html' %}

横幅的URLhttp://127.0.0.1:8000/static/images/banner.jpg

我的第二页模板还包含:

{% include 'polls/header.html' %}

但是横幅的URL更改为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))

为什么URL从..更改为/静态/。。至/第2页/。。?如何修复此问题,以便在使用{%include‘polls/header.html‘%}时始终显示横幅?

我认为在第二页中,{{ STATIC_URL }}没有定义。因此,src最终得到images/gcs_banner.jpg。这是一个相对url,因为它没有前缀斜杠。然后使用当前绝对url将其转换为绝对路径:/2ndpage/images/gcs_banner.jpg.

{{ STATIC_URL }}可能是由上下文处理器设置的——至少它在我的项目中是这样工作的上下文处理器实际上是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)