python - 传递给 HTML 模板时,有没有办法嵌套 Flask 变量(url_for)?(Python)
问题描述
我正在尝试通过将一些常见的 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 的做法或方法,或者这是不好的做法?任何和所有的帮助将不胜感激!
解决方案
我认为这样做的原因是 jinja 不会在已经渲染的东西中渲染任何东西。因此,因为您在{{ url_for() }}
内部传递了一个双括号,它会自动转义其中的任何内容。您基本上所做的是将 Jinja 语法放入 Jinja 未评估的内容中。所以它实际上看起来像这样:
{{ "{{ url_for() }}" }}
.
请记住,Jinja 只会将第一个双括号中的内容放在页面上(在转义之后),因此它不会呈现 that 的实际值{{url_for()}}
。我建议使用一个基本模板,然后您的其他页面可以继承该模板。
推荐阅读
- php - 为什么查询deos没有获取结果但是有行?
- centos7 - CentOS 7 上的 Deno:找不到“GLIBC_2.18”
- reactjs - 尝试将 Gatsby 站点部署到 heroku 时出现应用程序错误
- c# - 错误 System.IO.FileLoadException:'无法在 .NET Core 中加载文件或程序集'log4net,版本 = 2.0.8.0
- opendaylight - opendaylight 0.9.2 安装配置
- ios - 一次只允许一个 UIGestureRecognizer 可用 Swift
- java - Jenkins 未能第二次向 Tomcat 容器部署战争
- azure-sql-database - 新建链接服务(Azure SQL 数据库)测试连接失败
- powerbuilder - 当 Windows 10 设置为 125% 缩放时,PowerBuilder 打印缩放问题,但 150% 没有缩放问题。为什么?
- javascript - AJAX 响应总是 405