使用 jinja 将 python 个模块导入 Flask 头文件
Import python modules to a Flask header file with jinja
说我有这个 header.html
文件
<!DOCTYPE html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
{{ random.randrange(0, 5) }}
{% block body %}
{% endblock %}
</body>
</html>
和扩展它的 main.html
文件:
{% extends "header.html" %}
{% block body %}
<p>Hello</p>
{% endblock %}
和这个 main.py
文件:
from flask import Flask, render_template
import random
app = Flask(__name__)
@app.route("/")
def main():
return render_template("main.html")
app.run()
目前,当我 运行 访问该网站时,它显示 500 Internal Server Error
并且我在 python 控制台中收到此错误:
jinja2.exceptions.UndefinedError: 'random' is undefined
我怎样才能以某种方式 'import' 随机库进入 header.html 模板?
我是运行宁
Jinja 无法识别 random
。那是必须导入的 python,因此不是 jinja 内置的。 Jinja 有一个内置的随机过滤器:
{{ range(5)|random }}
更新问题的第二部分:
您可以使用 python 创建自己的过滤器。示例(使用 Flask):
@app.template_filter('datetimeformat')
def datetimeformat(value, format="%Y-%m-%d %H:%M:%S"):
return value.strftime(format)
{{ the_date|datetimeformat("%Y-%m-%d") }}
实际上你可以使用装饰器 app.context_processor
来实现:
import os
import random
@app.context_processor
def handle_context():
'''Inject object into jinja2 templates.'''
return dict(os=os, random=random)
然后您可以在每个模板中使用 os, random
而无需在您的视图函数中输入它们:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ random.randint(0,10) }}<br>
{{ os.path.abspath('') }}
</body>
</html>
你会得到这样的东西:
6
F:\Python\MyProject
说我有这个 header.html
文件
<!DOCTYPE html>
<html lang="en">
<head>
<title>Title</title>
</head>
<body>
{{ random.randrange(0, 5) }}
{% block body %}
{% endblock %}
</body>
</html>
和扩展它的 main.html
文件:
{% extends "header.html" %}
{% block body %}
<p>Hello</p>
{% endblock %}
和这个 main.py
文件:
from flask import Flask, render_template
import random
app = Flask(__name__)
@app.route("/")
def main():
return render_template("main.html")
app.run()
目前,当我 运行 访问该网站时,它显示 500 Internal Server Error
并且我在 python 控制台中收到此错误:
jinja2.exceptions.UndefinedError: 'random' is undefined
我怎样才能以某种方式 'import' 随机库进入 header.html 模板?
我是运行宁
Jinja 无法识别 random
。那是必须导入的 python,因此不是 jinja 内置的。 Jinja 有一个内置的随机过滤器:
{{ range(5)|random }}
更新问题的第二部分:
您可以使用 python 创建自己的过滤器。示例(使用 Flask):
@app.template_filter('datetimeformat')
def datetimeformat(value, format="%Y-%m-%d %H:%M:%S"):
return value.strftime(format)
{{ the_date|datetimeformat("%Y-%m-%d") }}
实际上你可以使用装饰器 app.context_processor
来实现:
import os
import random
@app.context_processor
def handle_context():
'''Inject object into jinja2 templates.'''
return dict(os=os, random=random)
然后您可以在每个模板中使用 os, random
而无需在您的视图函数中输入它们:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ random.randint(0,10) }}<br>
{{ os.path.abspath('') }}
</body>
</html>
你会得到这样的东西:
6
F:\Python\MyProject