将HTML插入Flask的正确方法

时间:2016-05-19 07:36:48

标签: python html flask insert

我知道如何在访问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网页?一个虚拟的例子也很棒。

4 个答案:

答案 0 :(得分:7)

  

我想弄清楚如何将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中的动态变量

  

我想动态渲染它。

docs

引用
  

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

如此简单:

{% 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,因为它是动态的,如果该值来自客户端,您可能会公开自己的文件

答案 1 :(得分:-1)

Flask使用Jinja2模板引擎(两者都有相同的开发人员),当使用render_template("filename", "content")时,将在模板文件夹中查找具有该文件名的模板。 如果您的应用程序是模块,则此文件夹应位于该模块旁边,如下所示:

/application.py
/templates
    /hello.html

如果它是一个包,它需要在你的包中,如下:

/application
    /__init__.py
    /templates
        /hello.html

答案 2 :(得分:-1)

模板继承对于html重用也很有用。您可以添加基本模板并将自定义html代码/块添加到子HTML代码。

  

基本模板:

<!doctype html>
<html>
  <head>
    {% block head %}
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    <title>{% block title %}{% endblock %} - My Webpage</title>
    {% endblock %}
  </head>
  <body>
    <div id="content">{% block content %}{% endblock %}</div>
    <div id="footer">
      {% block footer %}
      &copy; Copyright 2010 by <a href="http://domain.invalid/">you</a>.
      {% endblock %}
    </div>
  </body>
</html>
     

儿童模板:

{% extends "layout.html" %}
{% block title %}Index{% endblock %}
{% block head %}
  {{ super() }}
  <style type="text/css">
    .important { color: #336699; }
  </style>
{% endblock %}
{% block content %}
  <h1>Index</h1>
  <p class="important">
    Welcome on my awesome homepage.
{% endblock %}

来源:http://flask.pocoo.org/docs/0.12/patterns/templateinheritance/

答案 3 :(得分:-2)

您可以在python中将其作为字符串加载 但你应该让你的web服务器(apache?)处理