在带有多个参数的自定义模板标签的模板中使用“if”
Posted
技术标签:
【中文标题】在带有多个参数的自定义模板标签的模板中使用“if”【英文标题】:Use of "if" in template with custom template tag with multiple arguments 【发布时间】: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 部分。如果我将这个逻辑放在视图中,我认为它会太混乱。至少对我来说。 ;-) 所以如果可以在模板中完成就好了。 【参考方案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
【讨论】:
感谢您的回答,但这似乎不起作用:“'hs_get_section_answer' 收到了太多位置参数” 我相信您需要使用分配标签而不是简单标签。更改您的模板标签以使用分配标签:docs.djangoproject.com/en/dev/howto/custom-template-tags/…以上是关于在带有多个参数的自定义模板标签的模板中使用“if”的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 django 的自定义模板标签在模板的其他块中插入代码?