Flask中Jinja IF语句控制head内script标签加载不生效问题咨询
问题根源
Jinja模板的{% block %}块继承优先级高于子模板中块外层的条件判断,你当前将if语句套在{% block firebase1 %}、{% block firebase2 %}外部的写法无效:无论links变量取值是什么,子模板中定义的块内容都会直接覆盖父模板的对应块,外层的if判断不会生效。
Jinja的条件判断本身在<head>标签内完全可以正常运行,不存在使用限制,你不需要调整逻辑位置,只要修改块和判断的嵌套关系即可。
解决方法
方案1:将判断逻辑放在子模板的块内部(推荐,不影响父模板逻辑)
修改后的子模板代码如下:
{% extends 'layout.html' %} {% block title %}Title{% endblock %} {% block firebase1 %} {% if links == 'display' %} <script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-app.js"></script> {% endif %} {% endblock %} {% block firebase2 %} {% if links == 'display' %} <script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-auth.js"></script> {% endif %} {% endblock %} {% block content %} <!-- 原有页面内容 --> {% endblock %}
方案2:将判断逻辑移到父模板中(适合所有继承该父模板的页面都需要复用该判断规则的场景)
修改父模板layout.html的<head>部分代码:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="/static/favicon.ico" rel="icon" type="image/x-icon"/> <title>{% block title %}Title{% endblock %}</title> {% if links == 'display' %} {% block firebase1 %}<script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-app.js"></script>{% endblock %} {% block firebase2 %}<script src="https://www.gstatic.com/firebasejs/8.4.3/firebase-auth.js"></script>{% endblock %} {% endif %} </head>
该方案下子模板无需再定义firebase1、firebase2两个块的内容。
内容的提问来源于stack exchange,提问作者rihekopo
相关产品推荐
相关产品推荐

