Jinja2 渲染多个 HTML 文件?

1 投票
2 回答
4206 浏览
提问于 2025-04-18 17:40

我有一个主要的 index.html 文件,里面包含了几个指向其他 HTML 文件的链接。比如说,当用户在 index.html 中点击一个链接时,它会跳转到子页面 intro.html,但看起来 render_template 只接收一个 html 文件。我该如何用 render_template 连接多个 HTML 文件呢?


文件结构如下: templates/ index.html text.html

我只想从 index.html 链接到 text.html 文件。

index.html 中,我会有一个类似下面的链接:

<a href="text.html">Link</a>

然后我想让这个 Link 加载 text.html 的内容。


第二次编辑

@app.route('/myhtml', methods=['GET'])
def myhtml():
    return render_template('myhtml.html')

我想做这样的事情。如果我输入 localhost:8000/myhtml,它应该链接到 myhtml.html

2 个回答

0

在你的index.html文件中使用这个:

<a href="/about">Link</a>

然后你需要一个对应的路由,应该像这样:

@app.route('/about')
def about_page():

    # Do something else here

    return render_template('text.html')

if __name__ == '__main__':
    app.run()
0

这其实很简单——你只需要从网址中获取你请求的文件,然后用这个文件去查找一个已经存在的模板:

from flask import Flask, render_template, abort
from jinja2 import TemplateNotFound
app = Flask(__name__)

@app.route('/', defaults={'page': 'index'})
@app.route('/<page>')
def html_lookup(page):
    try:
        return render_template('{}.html'.format(page))
    except TemplateNotFound:
        abort(404)

if __name__ == '__main__':
    app.run()

如果你直接访问 127.0.0.1:5000,系统会默认把 page 变量设置为 index,所以它会尝试去 render_template('index.html'),而如果你访问 127.0.0.1:5000/mypage,它就会去找 mypage.html

如果找不到,就会出现404错误,表示没有找到。

这个例子完全是参考了Flask文档中的简单蓝图示例

撰写回答