【问题标题】:Jinja2 modal popup (Bootstrap 5) not appearing, no errorJinja2 模态弹出窗口(Bootstrap 5)没有出现,没有错误
【发布时间】:2022-02-03 20:54:03
【问题描述】:

我已经看到了这个问题的几个版本,但没有一个版本具有完全相同的参数或适合我的解决方案,所以这里是: 在 Jinja2 模板中,我在表单中调用 modal-popup,以确认外围设备的关闭。问题是模态弹出窗口 1. 不显示并且 2. 没有在终端或日志中输出任何内容。

模态调用的代码(else 中的最后 2 行):

 <form class="form form-horizontal" method="post" role="form" style="text-align: center;">
                    {{ power_form.hidden_tag() }}
                    
                    {% if power_status == "None" %}
                    {{ power_form.power_on(class_="btn btn-default") }}
                    {{ power_form.power_cycle(class_="btn btn-default") }}
                    {{ power_form.power_off(class_="btn btn-default") }}

                    {% else %}
                    {{ power_form.power_on(class_="btn btn-success") }}
                    {{ power_form.power_cycle(class_="btn btn-warning") }}
                    {{ power_form.power_off(type="button", class_="btn btn-danger", 
                    data_toggle="modal", data_target="#modalConfirm") }}

                    {% endif %}
                </form>

我检查了 Flask 中的函数是否允许 POST 和 GET 调用,并根据Bootstrap documentation. 使用了模态的默认实例化我还确保请求并更改了所需的库(JQuery、Bootstrap)从 bs_data_toggle 到 data_toggle 的语法(也适用于触发器),两者都不起作用。

请让我知道这是否足够的信息!我对 Web 开发非常陌生,并希望有任何正确方向的指示。谢谢,H。

P.S:这里是模态的代码:

<div class="modal fade" id="modalConfirm" tabindex="-1" aria-labelledby="modalConfirmLabel" aria-hidden="true">
<div class="modal-dialog">
  <div class="modal-content">
    <div class="modal-header">
      <h5 class="modal-title" id="modalConfirmLabel">Shutdown Confirmation</h5>
      <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
    </div>
    <div class="modal-body">
      ...
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
      <button type="button" class="btn btn-primary">Save changes</button>
    </div>
  </div>
</div>

P.S (2):相关的 CSS / JS 包含。 在 head 中,以下是 CSS 包括:

<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet" />
 <link href="{{ url_for('static', filename='css/light-bootstrap-dashboard.css') }}" rel="stylesheet" />
 <link href="{{ url_for('static', filename='css/spectrum.css') }}" rel="stylesheet"/>

在正文之后的单独脚本块中包含 JS:

 <script src="{{ url_for('static', 
  filename='js/core/jquery.3.2.1.min.js') }}" type="text/javascript"> 
 </script>
 <script src="{{ url_for('static', filename='js/core/popper.min.js') }}" 
 type="text/javascript"></script>
 <script src="{{ url_for('static', filename='js/core/bootstrap.min.js') 
 }}" type="text/javascript"></script>

【问题讨论】:

  • 能否也包含模态弹出窗口的 HTML 源代码?
  • 你好,Dauros!当然,将其添加到主要问题中。

标签: flask jinja2 bootstrap-modal flask-wtforms


【解决方案1】:

您已包含 Bootstrap v5 库,但不小心将 v4 语法(和文档)用于模态。有一个change in the new versiondata 属性有一个-bs- 后缀(不是前缀)。所以我们必须使用例如data-bs-toggleHTML 属性将信息传递给 Bootstrap:

{{ power_form.power_off(type="button", class_="btn btn-danger", 
                        data_bs_toggle="modal", data_bs_target="#modalConfirm") }}

【讨论】:

  • 谢谢,刚刚修正了这里的语法,但问题似乎与其他问题有关。
  • 然后有一个不同的问题,我只是用固定的数据属性复制粘贴了你的代码,它工作正常。您确定power_status 不是"None",因此您在else 分支中,因此您将所需的属性添加到按钮?如果打开浏览器的开发终端,有没有看到 JS 错误?
  • power_status 绝对是 None (我有一个打印语句来在终端中监视它)。其他按钮工作正常并报告终端输出,但按下电源关闭时输出为零。也许这可能是我包含的 Bootstrap 版本的问题?我已将此添加到主帖中。
  • 如果power_statusNone,那么您的电源关闭按钮没有激活模式所需的BS 属性:{{ power_form.power_off(class_="btn btn-default") }}。您只在else 分支的电源按钮中添加了它们。将power_status 设置为在else 分支中有工作电源关闭按钮。在第一种情况下,power_status == "None",您的电源关闭按钮应该处于“禁用”状态(因此用户无法单击它),因为它在那里什么都不做。
  • 嗨 Dauros,很抱歉这里的混淆 - power_status 是 None,但由于与外围标志有关的单独问题,它不会触发 if 语句的 None 子句。这可以通过登录门户在系统中看到,其中按钮具有颜色(而不是指定为 btn-default 或灰色)。因此,问题一定是其他问题。
猜你喜欢
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2010-09-25
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多