使用"如果"在带有多个参数的自定义模板标记的模板中

时间:2014-11-18 13:34:18

标签: django python-3.x django-templates

我编写了一个自定义模板标记来查询我的数据库,并检查数据库中的值是否与给定的字符串匹配:

@register.simple_tag
def hs_get_section_answer(questionnaire, app, model, field, comp_value):

    model = get_model(app, model)
    modal_instance = model.objects.get(questionnaire=questionnaire)

    if getattr(modal_instance, field) == comp_value:
        return True
    else:
        return False

在我的模板中,我可以按如下方式使用此标记:

{% hs_get_section_answer questionnaire 'abc' 'def' 'ghi' 'jkl' %}

该函数正确返回True或False。

我的问题:我想做这样的事情:

{% if hs_get_section_answer questionnaire 'abc' 'def' 'ghi' 'jkl' %}
  SUCCESS
{% else %}
  FAILURE
{% endif %}

但这不起作用;好像“if”模板标签似乎无法处理多个参数。

有人能给我一个如何解决这个问题的提示吗?

1 个答案:

答案 0 :(得分:1)

将模板标签调用的结果设置为变量,然后在该结果上调用{%if%}

{% hs_get_section_answer questionnaire 'abc' 'def' 'ghi' 'jkl' as result %}
{% if result %}
...
{% endif %}

您还需要更改模板标记以使用分配标记,而不是简单标记。请参阅分配标记django doc:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#assignment-tags

@register.assignment_tag
def hs_get_section_answer(questionnaire, app, model, field, comp_value):

  model = get_model(app, model)
  modal_instance = model.objects.get(questionnaire=questionnaire)

  if getattr(modal_instance, field) == comp_value:
    return True
  else:
    return False