Django: пробелы в URL-адресах статических изображений файлов, за исключением шаблона главной страницы - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь настроить мой статический файл в разработке. У меня есть изображение, расположенное в 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' %}

URL для баннера http://127.0.0.1:8000/static/images/banner.jpg

мой шаблон 2-й страницы также содержит:

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

Но URL для баннера изменится на http://127.0.0.1:8000/2ndpage/images/banner.jpg

мой шаблон polls / 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 меняется с ../static/ .. на ../ 2ndpage / ..? Как это исправить, чтобы при использовании {% include 'polls / header.html'%} баннер всегда отображался?

1 Ответ

3 голосов
/ 03 марта 2012

Я думаю, что на второй странице {{ 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)

Это пример явного использования RequestContext с render_to_response () :

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...