Django inclusion_tag 内容未显示
Django inclusion_tag contents not displaying
我无法显示 inclusion_tag 的内容。我没有收到错误,所以我知道标签正在注册,而且我几乎可以肯定它正在正确加载。标签创建于 crudapp/templatetags/crudapp_tags.py
from django import template
register = template.Library()
@register.inclusion_tag("forum.html")
def results(poll):
form = 'blah'
return {'form': form}
templates/forum.html
{% extends 'index.html' %}
{% load crudapp_tags %}
{% results poll %}
<p>aaa</p>
{% block homepage %}
<p>bbb</p> <!-- Only this displays -->
{% if form %}
<p>Form exists</p>
{% endif %}
{% for item in form %}
<p>This is {{ item }}</p>
{% endfor %}
<div>
<p>{% if user.is_authenticated %}Add a New Topic: <a href="{% url 'topic_form' %}"><span class="glyphicon glyphicon-plus"></span></a>{% endif %}</p>
</div>
<div>
<p>{{ totalposts.count }} posts, {{ totaltopics.count }} topics, {{ totalusers.count }} users, {{ totalviews.numviews}} views</p>
</div>
{% endblock %}
文件设置如下,
如果您使用的是包含标签,则该标签会呈现另一个 模板。您需要将使用 form
的代码移出 forum.html
并移至新模板中,例如results.html
results.html
{% if form %}
<p>Form exists</p>
{% endif %}
{% for item in form %}
<p>This is {{ item }}</p>
{% endfor %}
然后更改您的标签以使用此模板
@register.inclusion_tag("results.html")
def results(poll):
form = 'blah'
return {'form': form}
最后,由于是扩展模板,需要将then标签移动到块中,否则结果将无法使用。
{% block homepage %}
{% results poll %}
...
{% endblock %}
如果您想将项目添加到模板上下文而不是呈现另一个模板,那么您需要一个 simple tag。
@register.simple_tag
def fetch_result():
result = ['foo', 'bar']
return result
然后在您的模板中:
{% fetch_result as result %}
{% for item in result %}
<p>This is {{ item }}</p>
{% endfor %}
{% fetch_result as result %}
适用于 Django 1.9+ 中的简单标签。在早期版本中,您需要 assignment tag.
我无法显示 inclusion_tag 的内容。我没有收到错误,所以我知道标签正在注册,而且我几乎可以肯定它正在正确加载。标签创建于 crudapp/templatetags/crudapp_tags.py
from django import template
register = template.Library()
@register.inclusion_tag("forum.html")
def results(poll):
form = 'blah'
return {'form': form}
templates/forum.html
{% extends 'index.html' %}
{% load crudapp_tags %}
{% results poll %}
<p>aaa</p>
{% block homepage %}
<p>bbb</p> <!-- Only this displays -->
{% if form %}
<p>Form exists</p>
{% endif %}
{% for item in form %}
<p>This is {{ item }}</p>
{% endfor %}
<div>
<p>{% if user.is_authenticated %}Add a New Topic: <a href="{% url 'topic_form' %}"><span class="glyphicon glyphicon-plus"></span></a>{% endif %}</p>
</div>
<div>
<p>{{ totalposts.count }} posts, {{ totaltopics.count }} topics, {{ totalusers.count }} users, {{ totalviews.numviews}} views</p>
</div>
{% endblock %}
文件设置如下,
如果您使用的是包含标签,则该标签会呈现另一个 模板。您需要将使用 form
的代码移出 forum.html
并移至新模板中,例如results.html
results.html
{% if form %}
<p>Form exists</p>
{% endif %}
{% for item in form %}
<p>This is {{ item }}</p>
{% endfor %}
然后更改您的标签以使用此模板
@register.inclusion_tag("results.html")
def results(poll):
form = 'blah'
return {'form': form}
最后,由于是扩展模板,需要将then标签移动到块中,否则结果将无法使用。
{% block homepage %}
{% results poll %}
...
{% endblock %}
如果您想将项目添加到模板上下文而不是呈现另一个模板,那么您需要一个 simple tag。
@register.simple_tag
def fetch_result():
result = ['foo', 'bar']
return result
然后在您的模板中:
{% fetch_result as result %}
{% for item in result %}
<p>This is {{ item }}</p>
{% endfor %}
{% fetch_result as result %}
适用于 Django 1.9+ 中的简单标签。在早期版本中,您需要 assignment tag.