Django自定义标记:没有上下文的包含标记

时间:2011-10-02 22:12:37

标签: django django-templates

我已经阅读了custom tags and filters documentation,但我没有看到如何做到这一点。我想创建一个只呈现字符串的自定义标记。没有上下文,每次只是相同的字符串文字。在这种特殊情况下,我更倾向于将{%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 个答案:

答案 0 :(得分:1)

您可以使用简单标记执行此操作: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 %}来呈现字符串。