我知道如何在访问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网页?一个虚拟的例子也很棒。
答案 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>
我想动态渲染它。
从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 %} © 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?)处理