Django assignment_tag有条件

时间:2015-11-09 22:03:29

标签: python django

我试图根据简单条件显示部分内容。我的条件是assignment_tagTrue还是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设置为什么,块仍然会出现。我错过了什么?

2 个答案:

答案 0 :(得分:1)

首先,分配标签的工作原理并非如此。你从未真正调用过这个标签; if partner指的是一个名为" partner"的(不存在的)模板变量。您可以通过单独使用变量标记来调用赋值标记,并将变量分配给:

{% partner as partner_value %}
{% if partner_value %}...{% endif %}

其次,这不是块如何工作。你不能动态定义块;它们是模板基本结构的一部分,而不是评估期间分配的内容。

答案 1 :(得分:0)

我使用context_processorhttps://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 %}