Django:在{%if%}块

时间:2019-02-26 22:52:43

标签: django if-statement django-templates

我正在研究Django项目,并编辑其他视图继承的基础模板。我通常具有以下格式的上下文变量:

context = {
    'metadata': {
        'data1': value,
        # etc
    },
    'data': {
        'value1': True,
        'value2': False,
        # etc
    },
}

我一直试图根据'data'中的值是true / false来添加标签,例如:

{% if data.value1 is True %}
     {% load some_module %}
{% endif %}
{% if data.value2 is True %}
     {% load something_else %}
{% endif %}

我的问题是,即使data.value1为False,模板也会尝试在if块中加载程序包,从而导致页面损坏。我不知道我要去哪里。您不能引用这样的上下文变量吗?我只是在使用if块错误吗?有更好的方法吗?

更新: 我正在尝试根据项目是否已在设置文件中配置了必要的ID,有条件地在Django-Analyical中加载一些跟踪标签。

我认为实际的代码是

{% block analyticsscripts %}
      {% if analytics.analytical %}
        {% load analytical %}
      {% endif %}
      {% if analytics.clickmap %}
        {% load clickmap %}{% clickmap %}
      {% endif %}
      {% if analytics.clicky %}
        {% load clicky %}{% clicky %}
      {% endif %}
      {% if analytics.crazyegg %}
        {% load crazy_egg %}{% crazy_egg %}
      {% endif %}
{% endblock %}

上下文处理器中的实际代码示例是

context['analytics'] = {
            'analytical': bool('analytical' in settings.INSTALLED_APPS),
            'clickmap': bool(settings.CLICKMAP_TRACKER_ID),
            'clicky': bool(settings.CLICKY_SITE_ID),
            'crazyegg': bool(settings.CRAZY_EGG_ACCOUNT_NUMBER),
            'gauges': bool(settings.GAUGES_SITE_ID),
            'googleanalytics': bool(settings.GOOGLE_ANALYTICS_JS_PROPERTY_ID),
            'gosquared': bool(settings.GOSQUARED_SITE_TOKEN),
            }

在django项目的设置文件中引用其中一些值(默认情况下设置为False,直到指定它们)

CLICKMAP_TRACKER_ID = False
CLICKY_SITE_ID = False
CRAZY_EGG_ACCOUNT_NUMBER = False
GAUGES_SITE_ID = False
GOOGLE_ANALYTICS_JS_PROPERTY_ID = False
GOSQUARED_SITE_TOKEN = False
HOTJAR_SITE_ID = False
HUBSPOT_PORTAL_ID = False
INTERCOM_APP_ID = False

0 个答案:

没有答案