为 Django 生成 kwargs bootstrap_field
Generate kwargs for Django bootstrap_field
我正在尝试使用 bootstrap4 包为 Django 表单自动生成字段列表。
我正在字典中定义 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 标签使用过滤器 returns 作为 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 {}
我认为 kwargs 解包在 django 模板语言中不可用。你可以做的是让你的过滤器像这样为你渲染实际字段
from django.template.defaulttags import register
from bootstrap4.templatetags.bootstrap4 import bootstrap_field
@register.filter
def get_kwargs(formfield, data):
item = next((item for item in data if item["name"] == formfield.name), None)
kwargs = item.get('args') or {}
return bootstrap_field(formfield, **kwargs)
并在模板中执行
{{ field|get_kwargs:data }}
Ps:你可以将 get_kwargs
的名称更改为更有意义的名称(如 render_field
)
我正在尝试使用 bootstrap4 包为 Django 表单自动生成字段列表。
我正在字典中定义 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 标签使用过滤器 returns 作为 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 {}
我认为 kwargs 解包在 django 模板语言中不可用。你可以做的是让你的过滤器像这样为你渲染实际字段
from django.template.defaulttags import register
from bootstrap4.templatetags.bootstrap4 import bootstrap_field
@register.filter
def get_kwargs(formfield, data):
item = next((item for item in data if item["name"] == formfield.name), None)
kwargs = item.get('args') or {}
return bootstrap_field(formfield, **kwargs)
并在模板中执行
{{ field|get_kwargs:data }}
Ps:你可以将 get_kwargs
的名称更改为更有意义的名称(如 render_field
)