微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当传递给HTML模板时,是否可以嵌套Flask变量url_for? Python

如何解决当传递给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 举报,一经查实,本站将立刻删除。