请有人解释一下为什么会这样吗? {{field | safe}}的作用是什么?
我的App.py代码-
class ContactForm(FlaskForm):
name = StringField("Name Of Student",validators = [InputRequired(message
= 'Name is missing'),Length(min=5,max=10,message="wrong")])
email = StringField("email",[validators.Email("Please enter your email
address.")])
@app.route('/form', methods = ['GET','POST'])
def index():
form = ContactForm()
if form.validate_on_submit():
return render_template('macro_output.html',form=form)
return render_template('main_form.html',form=form)
macro_form.html
{% macro render_output(field) %}
<p>
{{ field.label}}
{{ field |safe}}
</p>
{% endmacro %}
macro_output.html
{% from "macro_form.html" import render_field,
render_ErrorMessage,render_output %}
<html>
<body>
{{ render_output(form.name)}}
{{ render_output(form.name.data)}}
{{ render_output(form.email)}}
{{ render_output(form.email.data)}}
</body>
</html>
答案 0 :(得分:0)
jijna2过滤器safe
将字符串视为安全,并且不会通过自动转义任何原本会解释为代码的字符(在这种情况下为HTML代码)来进行任何预格式化。
因此,如果某个变量,例如form.name.data = <html>
,然后调用{{ form.name.data | safe }}
,则会在您的HTML中嵌入一个html标签(<html>
),并且我希望HTML浏览器解析器将其忽略为错误(您可以检查渲染的页面源)。但是调用{{ form.name.data }}
jinja2将转义'<>'字符,只有'html'进入HTML并因此呈现为文本。
我强烈建议您不要在用户输入中使用安全过滤器,因为任意用户都可以将代码注入到您的网页中,例如<script> ... </script>