我试图通过将一些常见的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>
一样。脚本文件位于正确的目录/filepath中。
我试着去掉{{}}
的双括号,用不同的引号来搅乱它们,但都没有用。我以前有过这种方法的记忆,但不能肯定。
在模板代码块中是否存在使用url_for的实践或方法,还是这种做法很糟糕?任何和所有的帮助都将不胜感激!
发布于 2020-09-13 19:05:50
我认为这样做的原因是jinja不会在已经呈现的东西里面呈现任何东西。因此,因为您是在双大括号内传递{{ url_for() }}
,它将自动转义其中的任何内容。基本上,您所做的是将Jinja语法放在Jinja未评估的内容中。看起来是这样的:
{{ "{{ url_for() }}" }}
。
记住,Jinja只会将第一个双大括号中的任何内容放在页面上(转义后),因此它不会呈现该{{url_for()}}
的实际值。我建议使用基本模板,然后可以由其他页面继承。
https://stackoverflow.com/questions/63874215
复制相似问题