我正在编写表单。我使用Select2允许用户在select标签中选择多个选项。如果还有其他错误,我会将用户重定向回表单并保留用户已输入或选择的值,这样他就不必再填写整个表单了。
在字段的其余部分,一切都很好,因为我可以通过使用request.post('input_name')
函数来检索发布的信息。
当谈到这些多项选择时,我知道我得到了一个数组。 不知怎的,我知道如果我进行以下测试,确实会在数组中发布值:
{% if request.post('select2inputMultiple') %}
<p>Data have been posted from select2 multiple</p>
{% endif %}
但是,如果我尝试显示(输出)如下数据:
{{request.post('select2inputMultiple')}}
它会抛出以下错误:
An exception has been thrown during the rendering of a template ("Array to string conversion")
如何访问该阵列的项目?
嗯,看起来它正在运行,我正在尝试使用这样的foreach函数:
{% if request.post('select2inputMultiple') %}
<p>Data have been posted from select2 multiple</p>
{% for single in request.post('select2inputMultiple') %}
value: {{single}}
{% endfor %}
{% endif %}
它正在输出所需的数据!
答案 0 :(得分:1)
假设您的输入名为select2inputMultiple[]
,request.post('select2inputMultiple')
是一个数组(如错误所示)。您无法在页面上显示数组而无需中介将其转换为字符串。查看Twig值的最简单方法是使用dump
方法,该方法映射到var_dump
。所以你会这样做
{{ dump(request.post('select2inputMultiple')) }}
假设你有一个像这样的选择结构:
<select name="select2inputMultiple[]">
{% for option in options %}
<option value="{{ option.id }}">{{ option.name }}</option>
{% endfor %}
</select>
从该数组中选择这些选项的最简单方法是:
<select name="select2inputMultiple[]">
{% for option in options %}
<option value="{{ option.id }}"
{% if option.id in request.post('select2inputMultiple') %}
selected
{% endif %}
>{{ option.name }}</option>
{% endfor %}
</select>