Пользовательский тег включения - PullRequest
0 голосов
/ 07 декабря 2011

Я хочу создать собственный тег включения (например, {% smart_include something %}), который понимает, что именно мы хотим включить, и затем вызвать обычный тег {% include %}.Это должно быть примерно так:

@register.simple_tag
def smart_include(something):
    if something == "post":
          template_name = "post.html"
          return regular_include_tag(template_name)

Есть ли способ использовать тег {% include %} в коде Python, и как именно?

UPD. получилосьЛучший способ решить эту проблему - использовать render_to_string ярлык

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Я предполагаю, что есть причина, по которой вы этого не делаете:

{% if foo %}
  {% include 'hello.html' %}
{% endif %}

Если something - фиксированное число, вы можете использовать теги включения .В вашем шаблоне вместо {% smart_tag something %} у вас есть {% something %}, тогда ваша библиотека тегов выглядит следующим образом:

@register.inclusion_tag('post.html')
def something():
    return {} # return an empty dict

Наконец, вы можете повторить функциональность тега include.Этот фрагмент должен указать вам правильное направление:

filepath = '/full/path/to/your/template/%s' % something
try:
   fp = open(filepath, 'r')
   output = fp.read()
   fp.close()
except IOError:
   output = ''
try:
   t = Template(output, name=filepath)
   return t.render(context)
except TemplateSyntaxError, e:
   return '' # Fail silently.
return output
0 голосов
/ 07 декабря 2011

Если вы заглянете в django.template.loader_tags , вы запустите поиск функции do_include , которая в основном вызывается при использовании {% include%}.

Так что вы должны иметь возможность импортировать его, вызывая саму функцию в python.

Я не пробовал это, но я думаю, что это должно работать

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