Django inclusion_tag内容未显示

时间:2016-05-23 12:25:27

标签: django tags django-templates inclusion

我无法显示包含标签的内容。我没有收到错误,所以我知道标签正在注册,我几乎可以确定它正确加载。标签在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}

模板/ 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 %}

文件设置如下,

enter image description here

1 个答案:

答案 0 :(得分:3)

如果您使用的是包含标记,则标记会呈现另一个模板。您需要将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}

最后,由于您要扩展模板,因此需要将标记移动到块中,否则将不会使用结果。

{% 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