edh*_*ges 27 python jinja2 flask
我有非常简单的联系表格,我想以某种方式隐藏标签,以便它不显示Csrf Token
.我正在使用Flask和Flask-WTForms,我正在渲染这样的表单:
{% for field in form %}
{{ field.label }}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
所以基本上这显示我的输入正确,并且隐藏了csrf,但标签没有被隐藏?我应该克服它并隐含地说,form.field_name
而不是循环通过表单或有办法处理这个"角落案例".
我正在考虑在for循环声明或标签声明中进行逻辑检查,但到目前为止,我还没有找到有效的文档中的任何内容.
谢谢
编辑:我已经通过这样做"修复"了这个问题,但感觉有点肮脏和黑客,我不喜欢我仍然愿意接受更好的解决方案:
{% if not loop.first %}
{{ field.label }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
jd.*_*jd. 42
如果您想要一个适用于所有隐藏字段而不仅仅是CSRF令牌的更通用的解决方案:
{{ form.hidden_tag() }}
{% for field in form if field.widget.input_type != 'hidden' %}
{{ field.label }}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
form.hidden_tag()
由Flask-WTF提供.
小智 8
只是为了增加JD的优秀答案......
对于那些在这个问题上遇到困难的人:你可以通过将条件"if field.widget.input_type!='hidden'"专门添加到标签而不是表单迭代器来避免丢失(csrf)隐藏字段(从而保护).
即:
不
{{ form.hidden_tag() }}
{% for field in form if field.widget.input_type != 'hidden' %}
{{ field.label }}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
但
{{ form.hidden_tag() }}
{% for field in form %}
{% if field.widget.input_type != 'hidden' %} {{ field.label }} {% endif %}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我认为这也应该有效:
{% for field in form if field.id != 'csrf_token' %}
{{ field.label }}
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5652 次 |
最近记录: |