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

Я прочитал документацию по пользовательским тегам и фильтрам , но не вижу, как это можно сделать.Я хочу сделать пользовательский тег, который просто отображает строку.Нет контекста, просто один и тот же строковый литерал каждый раз.В этом конкретном случае я бы предпочел это вместо размещения {% include 'hello_world.htm'%} повсюду:

Foo, foo foo
<br>
{% hello_world %}
<br>
bar bar bar

Визуализация:

Foo, foo foo
<br>
"Hello World"
<br>
bar bar bar

Я чувствую, чтоЯ должен быть в состоянии сделать это с чем-то вроде:

custom_tags.py:

from django import template
register = template.Library()

@register.inclusion_tag('hello_world.htm')
def hello_world():
     return {}

# Or:

def hello_world():
     return {}
register.inclusion_tag('hello_world.htm', takes_context=False)(hello_world)

Нет кубиков.У меня есть другие пользовательские теги в custom_tags.py, я загружаю их, и они работают нормально, но всегда получают

Invalid block tag: 'hello_world', expected 'endblock' or 'endblock content'

Документация гласит

Теги сложнее, чем фильтры,потому что теги могут делать что угодно.

... как вы можете сделать простейшую вещь с тегами?

1 Ответ

1 голос
/ 03 октября 2011

Вы можете сделать это с помощью простого тега: https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#shortcut-for-simple-tags

from django import template

register = template.Library()

@register.simple_tag
def hello_world():
    return u'Hello world'

, тогда в вашем шаблоне вы можете написать {% hello_world %} для рендеринга строки.

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