繁体   English   中英

带有 Flask(和 Jinja)的 Bootstrap 5 Popover

[英]Bootstrap 5 Popover with Flask (and Jinja)

所以我试图创建一个简单的弹出框,它是 Jinja 模板中的一个 div 组件,由 Flask 呈现,我似乎无法让它工作

布局.jinja2

<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.png') }}">
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <title>{{ title }}</title>
    </head>

    <body class="{{template}}">
        <div class="container">
            {% block content %}
            
            {% endblock %}
        </div>
        <!-- JavaScript Bundle with Popper -->
        <script 
            src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.js" 
            integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" 
            crossorigin="anonymous"></script>
    </body>
</html>

然后我有另一个 jinja 文件,它扩展了包含我的导航栏和所需下拉列表的布局:

page_2.jinja

% extends "layout.jinja2" %}

{% block content %}
    <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
        <div class="container-fluid">
            <a class="navbar-brand" href="/">My Page</a>
    
            <div class="collapse navbar-collapse" id="navbarColor01">
                <ul class="navbar-nav me-auto">
                    {% if current_user.is_authenticated %}
                        {% for app in current_user.app_permissions %}
                            {% if app == 'settings' %} {% continue %} {% endif %}
                            <li class="nav-item">
                                <a class="nav-link active" href="{{ url_for(get_app_url(app)) }}">{{ app.capitalize() }}</a>
                            </li>
                        {% endfor %}
                    {% endif %}
                </ul>
                <ul class="navbar-nav me-right">
                    {% if current_user.is_authenticated %}
                        <div>
                            <img id="menu" src="/assets/user_icon.png" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-content="nav_dropdown">
                        </div>
                    {% else %}
                        <form class="d-flex" method="POST" action="/login">
                            <input class="form-control me-sm-2" type="email" name="email" placeholder="email">
                            <input class="form-control me-sm-2" type="password" name="password" placeholder="password">
                            <button class="btn btn-secondary my-2 my-sm-0" type="submit">Login</button>
                        </form>
                    {% endif %}
                </ul>
            </div>
        </div>
    </nav>
    

    <!-- this is what I want to be displayed when the user clicks on the image in the nav -->
    <div role="tooltip" x-placement="bottom" class="fade show popover bs-popover-bottom" 
        id="nav_dropdown" data-popper-reference-hidden="false" data-popper-escaped="false" 
        data-popper-placement="bottom" style="position: absolute; inset: 0px auto auto 0px; transform: translate(1413px, 52px);">
        
        
        <ul class="list-group">
            <a href="/settings" data-rr-ui-event-key="/settings" class="list-group-item">Settings</a>
            <a href="/logout" data-rr-ui-event-key="/logout" class="list-group-item">Logout</a>
        </ul>
    </div>  

    <script type="text/javascript">
        var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
            return new bootstrap.Popover(popoverTriggerEl)
        })
        
    </script>
{% endblock %}

我看到了我想要下拉列表的 div,但它总是在那里,而不是隐藏,并在单击 IMG 时显示。

根据引导文档:

https://getbootstrap.com/docs/5.0/components/popovers/

我必须使用 page_2.jinja 底部的最后一个脚本来启用弹出框。 但是,当我运行该应用程序时,出现错误:

page_2:67 Uncaught ReferenceError: bootstrap is not defined

所以我不太确定我在这里做错了什么,任何和所有的帮助都会很棒,这是我在网站上唯一需要 javascript 的地方,我使用引导程序 5 来避免加载 jQuery 因为在某些我使用 React 的其他页面有时会发生冲突。

bootstrap 未在激活内容 jinja 块中的所有 Popover 的脚本中定义,因为 Bootstrap 仅在 layout.jinja2 文件中被引用。 在 jinja 块之前将引用 Bootstrap 的脚本标记移动到该文件的顶部应该可以解决此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM