You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 20:24:03