将 HTML 插入 Flask 的正确方法

新手上路,请多包涵

我知道如何在访问 URL 时使用 render_template 从 Python 发送一些纯文本:

 @app.route(/success.html")
...
return render_template("index.html", text="This text goes inside the HTML")

模板会是这样的:

 <div class="output">
  {{text|safe}}
 </div>

但是,当我需要插入几行 HTML 时,我不确定该怎么做。例如一个表格:

 <form action="">
<input type="checkbox" name="vehicle" value="Bike">I have a bike<br>
<input type="checkbox" name="vehicle" value="Car">I have a car
</form>

如果我将它作为字符串加载到 Python 脚本中并将其发送到模板,它可能会起作用,但这听起来不太正确。

任何人都知道如何正确地将 HTML 插入 Flask 网页?一个虚拟的例子也很好。

原文由 multigoodverse 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 688
1 个回答

我想弄清楚如何将 HTML 片段插入现有模板中……

您可以使用 Jinja2 {% include %} 指令。

 {% include 'your_form.html' %}

…以及该片段的存储位置。

所以你会把你的表单放在它自己的模板中,称为 your_form.html 内容:

 <form action="">
<input type="checkbox" name="vehicle" value="Bike">I have a bike<br>
<input type="checkbox" name="vehicle" value="Car">I have a car
</form>

然后在你的 index.html 包括它

<div class="output">
  {% include 'your_form.html' %}
 </div>

Jinja2 中的动态变量

我想动态渲染它。

引用 文档

如果您访问标签内的变量,请不要在它们周围放置大括号。

很简单:

 {% include html_file %}

如果您使用的是旧版本,这里有一个简单的方法

{% include '%s' % html_file %}

只是为了说明它的灵活性,这里有一些例子可以给你灵感

{% include '%s.html' % name_without_extension %}
{% include 'templates/%s/forms/%s' % (company, template) %}

您也可以像这样设置一个 Jinja 变量(IMO 更冗长)

 {% set template_path = html_file %}
{% include template_path %}

安全提示: 确保您确切知道作为变量传递的内容 html_file ,因为它是动态的,如果该值来自客户端,您可能会暴露自己的文件

原文由 bakkal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题