如何解决当传递给HTML模板时,是否可以嵌套Flask变量url_for? Python
我试图通过将它们作为Flask变量(特别是我的样式表和脚本)传递给一些常见的HTML元素以模板。为了进一步简化和响应,我尝试使用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只会将前两个大括号中的内容放在页面上(转义后),因此它不会呈现该{{url_for()}}
的实际值。我建议您使用基本模板,然后其他页面即可继承该模板。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。