【发布时间】:2019-08-26 14:05:51
【问题描述】:
我正在尝试使用 bootstrap4 包为 Django 表单自动生成字段列表。
我在 dict 中定义 kwargs,并希望遍历字段并将任何 kwargs 应用于 bootstrap4 附带的 bootstrap_field 标记。
数据
data = [
{
"name": "school_1",
"args": {
"show_label": True,
},
},
{
"name": "school_2",
"args": {
"show_label": False,
},
},
]
模板:
{% for field in form %}
{% bootstrap_field field field|get_kwargs:data %}
{% endfor %}
模板过滤器:
from django.template.defaulttags import register
@register.filter
def get_kwargs(formfield, data):
item = next((item for item in data if item["name"] == formfield.name), None)
if item:
return item.get('args'):
return None
问题是 bootstrap_field 标记使用过滤器返回的 arg,而不是 kwarg。有什么我可以做或需要替换 bootstrap_field 的吗?
错误render_field() takes 1 positional argument but 2 were given
args (<django.forms.boundfield.BoundField object at 0x10f834240>,
{'show_label': True})
kwargs {}
【问题讨论】:
-
试试
{% bootstrap_field field kwargs=field|get_kwargs:data %} -
@dirkgroten 它会将
{'kwargs': {'key': 'value'}}传递给bootstrap_field -
我很害怕。我认为不可能这样,如果我是你,我会创建一个调用
bootstrap_field的模板过滤器,以便将数据作为**kwargs传递。 -
@dirkgroten 这就是我的想法。