【发布时间】:2020-09-13 18:30:57
【问题描述】:
我正在尝试通过将一些常见的 HTML 元素作为 Flask 变量传递来模板化,特别是我的样式表和脚本。为了进一步简化和响应,我尝试使用url_for 来连接它们。
在我的 app.py 中有:
common_html = {
'navbar': '''<nav class....>''',
'scripts': '''<!-- D3 -->
<script src="https://d3js.org/d3.v5.min.js"></script>
<!-- Personal JS -->
<script src="{{url_for('static', filename='javascript/myjs.js')}}"></script>'''
}
@app.route('/index')
def index():
return render_template('index.html', common=common_html)
在我的 HTML 文件中:
...
<body>
<!-- Nav --!>
{{common['navbar']|safe}}
<h1>Stuff</h1>
</body>
<!-- Scripts -->
{{common['scripts']|safe}}
</html>
在浏览器中,我的导航栏代码可以正常加载,但是包含 url_for 语句的脚本标签运行不正常。检查后显示为<script src="{{url_for('static', filename='javascript/myjs.js')}}"></script>。脚本文件位于正确的目录/文件路径中。
我尝试删除 {{}} 双括号并弄乱使用的不同引号无济于事。我记得这种方法以前在某个时候有效,但不能确定。
是否有在模板代码块中使用 url_for 的做法或方法,或者这是不好的做法?任何和所有的帮助将不胜感激!
【问题讨论】:
-
这是正确的方法,但也有浏览器缓存。你清除了吗?
-
另外,你为什么要在每个请求上传递导航栏?我为什么要传递导航栏 或 导入 没有意义
-
|safe与 jinja 是否会识别双括号有什么关系吗? -
@roganjosh 我没有尝试清除浏览器缓存,但我一直在更改之间进行硬重新加载。清算会做什么?
-
为什么没有基础模板并使用模板继承?这不是每个请求都要传递的东西
标签: python html flask jinja2 url-for