我试图根据简单条件显示部分内容。我的条件是assignment_tag
是True
还是False
。
Templatetag:
from django import template
register = template.Library()
@register.assignment_tag
def partner():
return False
模板:
{% load partner_check %}
{% if partner %}
{% block header %}
{% include 'includes/partner_header.djhtml' %}
{% endblock header %}
{% block footer %}
{% include 'includes/partner_footer.djhtml' %}
{% endblock footer %}
{% endif %}
无论我将partner
设置为什么,块仍然会出现。我错过了什么?
答案 0 :(得分:1)
首先,分配标签的工作原理并非如此。你从未真正调用过这个标签; if partner
指的是一个名为" partner"的(不存在的)模板变量。您可以通过单独使用变量标记来调用赋值标记,并将变量分配给:
{% partner as partner_value %}
{% if partner_value %}...{% endif %}
其次,这不是块如何工作。你不能动态定义块;它们是模板基本结构的一部分,而不是评估期间分配的内容。
答案 1 :(得分:0)
我使用context_processor
(https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS)
上下文处理器:
def partners(context):
return {
'partner': False
}
模板:
{% block header %}
{% if partner %}
{% include 'includes/partner_header.djhtml' %}
{% else %}
{{ block.super }}
{% endif %}
{% endblock header %}
{% block footer %}
{% if partner %}
{% include 'includes/partner_footer.djhtml' %}
{% else %}
{{ block.super }}
{% endif %}
{% endblock footer %}