我正在尝试编写一个带有任意数量参数的
django包含标记:
@register.inclusion_tag('so.html')
def table_field(*args):
fields = []
for arg in args:
fields.append(arg)
return { 'fields': fields, }
但是,当我从django的模板引擎调用它时:
{% table_field form.hr form.bp form.o2_sat %}
我收到错误:
table_field takes 0 arguments
这是django模板引擎的另一个限制吗?
最佳答案 从1.2.1开始,您可以将参数传递给包含标记.
这是我的mod到django投票模板标签的一个例子
@register.inclusion_tag("voting/vote_form.html", takes_context=True)
def vote_form(context, vote_object, vote_dict, score_dict):
if isinstance(vote_dict, dict):
模板看起来像:
{% vote_form bookmark vote_dict score_dict %}
我不喜欢这个是没有办法命名参数,只是把它们整理好,但确实有效.
我现在不太清楚的是,为什么在指定take_context时,父上下文不会与您返回的上下文一起传递以用于呈现包含模板.
您尝试使用* args将无法正常工作,因为传递的args#是针对该函数进行检查的.