我一直在尋找Django自定義模板標籤的例子,我注意到很多人在上下文中設置了一些值而不是渲染模板。Django自定義模板標籤:首選呈現模板還是填充上下文?
哪一個更好?
我會告訴你兩個例子。 在第一個,templatetags/entry_extras.py
填充ContextNode
的渲染方法中的上下文。在模板文件中,它加載調用last_entries標記的上下文,然後加載部分模板。
extry_extras.py
class ContextNode(template.Node):
def render(self, context):
stream = BlogEntry.objects.all()[1:5]
context['last_entries'] = stream
return ''
@register.tag(name="last_entries")
def get_last_entries(parser, token):
return ContextNode()
mytemplate.html
...
{% load entry_extras %}
{% last_entries %}
{% include 'last_entries_widget.html' with last_entries=last_entries %}
在第二個例子,所述template_tag渲染模板本身,所以在mytemplate.html主叫該標籤足以顯示該小部件。
extry_extras.py
class ContextNode(template.Node):
def render(self, context):
stream = BlogEntry.objects.all()[1:5]
return render_to_string('last_entries_widget.html',
{'last_entries': stream},
context)
@register.tag(name="last_entries")
def get_last_entries(parser, token):
return ContextNode()
mytemplate.html
...
{% load entry_extras %}
{% last_entries %}