【问题标题】:Use of "if" in template with custom template tag with multiple arguments在带有多个参数的自定义模板标签的模板中使用“if”
【发布时间】:2015-01-15 17:15:57
【问题描述】:

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

@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”模板标签无法处理多个参数。

谁能告诉我如何解决这个问题?

【问题讨论】:

  • 这个逻辑基本上属于视图,不属于模板
  • 我需要查询来动态显示或隐藏我的 html 部分。如果我将这个逻辑放在视图中,我认为它会太混乱。至少对我来说。 ;-) 所以如果可以在模板中完成就好了。

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


【解决方案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

【讨论】:

猜你喜欢
  • 2018-02-04
  • 2011-12-09
  • 2021-09-04
  • 2015-01-20
  • 2011-01-02
  • 1970-01-01
  • 2014-10-28
  • 2015-03-16
  • 2011-08-27
相关资源
最近更新 更多