Django: доступ к MEDIA_URL в теге включения? - PullRequest
1 голос
/ 30 апреля 2011

Новичок в Django, поэтому в моей методологии может быть неточность.

У меня есть блок сложного HTML, который я повторно использую в нескольких частях моего сайта, но который заполнен различными данными. Я хочу превратить это в блок, который могу поставить где угодно.

Я прочитал теги включения и определил это так:

from django import template
register = template.Library()

@register.inclusion_tag('release_widget.html')
def release_widget(releases):
    return {'release_list': releases}   

Тогда, когда я использую это в своих шаблонах:

{% load release_widget %}
{% release_widget release_list %}

Это работает. Моя проблема заключается в том, что внутри файла release_widget.html я теряю доступ к моей переменной MEDIA_URL, которая определяет, где искать ресурсы моего изображения. Я предполагаю, что это потому, что контекст не передается?

Я посмотрел на параметр takes_context=True, но не смог его понять - похоже, он больше не принимает переменную, что не работает для меня - мне нужно иметь возможность передавать каждый словарь каждый раз я включаю блок.

Есть ли лучший способ сделать это? Должен ли я вообще использовать MEDIA_URL? Я не могу просто использовать абсолютные пути, так как структура моего сайта похожа на site.com/article/something/123, а ресурсы находятся на site.com/assets/, и я не хочу, чтобы ../ везде.

спасибо, Matt

Ответы [ 2 ]

12 голосов
/ 30 апреля 2011

takes_context - верный путь.Я не знаю, почему вы говорите, что она не принимает переменную: она просто принимает контекстный словарь в качестве дополнительного (начального) параметра.Итак, тег выглядит так:

@register.inclusion_tag('release_widget.html', takes_context=True)
def release_widget(context, releases):
    return {'MEDIA_URL': context['MEDIA_URL'], 'release_list': releases}   
3 голосов
/ 30 апреля 2011

Вы можете импортировать MEDIA_URL в тег шаблона и передать его в шаблон:

def release_widget(releases):
    from django.conf import settings
    return {'release_list': releases,
            'MEDIA_URL': settings.MEDIA_URL} 

Затем вы можете продолжить использовать {{ MEDIA_URL }} в своих шаблонах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...