繁体   English   中英

url_for 未在 Flask 中定义

[英]url_for is not defined in Flask

import os
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
from flask import Flask,url_for
app = Flask(__name__)

@app.route('/')
def hello_world():
    tmpl = env.get_template('index.html')
    sidebar = env.get_template('sidebar.html')
    return tmpl.render(root_url="",sidebar=sidebar.render())

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

并在 tempaltes/index.html

{{ url_for('static', filename='js/main.js') }}

虽然,我得到 url_for 没有定义? 我正在尝试按照在线示例进行操作,但我不知道为什么会得到这个

我认为问题在于您试图在 jinja html 模板中包含代码逻辑。 Jinja 根据设计禁止这样做,因此代码/演示文稿不会混合。

因此,我建议在代码中生成 url,将其存放在您发送 jinja 的对象中的某个位置,然后在模板中使用该变量。 类似的东西:

def hello_world():
    tmpl = env.get_template('index.html')
    sidebar = env.get_template('sidebar.html')
    js_url = url_for('static', filename='js/main.js')
    return tmpl.render(root_url="",sidebar=sidebar.render(), jsurl=js_url)

然后在模板方面:

<script type="text/javascript" src="{{jsurl}}"></script>

您似乎以一种不推荐的方式使用 Flask 和 Jinja。 我建议你使用render_template ,它也增加了对 Flask 特定函数的访问,比如url_for

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('index.html')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM