【问题标题】:Jinja2 render multiple html files?Jinja2 渲染多个 html 文件?
【发布时间】:2014-08-18 15:17:00
【问题描述】:

我有主要的index.html 文件,它包含几个指向子html 文件的链接。例如,从index.html 开始,如果用户单击一个链接,它会指向子页面intro.html,但似乎render_template 只收到一个html 文件。如何使用render_template连接多个html文件?


文件结构: 模板/ 索引.html 文本.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

【问题讨论】:

  • render_template 一次只渲染一个模板,这很有意义。在您的模板中,您要么想要提供静态文件,要么想要调用视图函数,该函数反过来将呈现它的相应模板。你想做哪一个?
  • view 函数是什么意思?我只想将 html 文件分开并在一个本地主机中提供它们
  • 放一个示例代码,然后我可以为您提供更多帮助。视图是指您的请求将被路由到的功能。
  • 我添加了一个例子。谢谢!
  • 正如我所见,您只想提供静态 html 文件,因此您应该使用网络服务器而不是烧瓶。无论如何,烧瓶有一些方法。看看这个答案:stackoverflow.com/a/20648053

标签: python html templates flask jinja2


【解决方案1】:

这很简单——您只需要从 url 中捕获您请求的文件,然后使用它来查找现有模板:

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 not found 错误中止。

这个例子,完全抄自 Flask 文档中的simple blueprint example。

【讨论】:

    【解决方案2】:

    在你的 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多