【问题标题】:Implementing simple Modal in Django application在 Django 应用程序中实现简单的 Modal
【发布时间】:2021-07-16 01:25:30
【问题描述】:

我正在努力在我的 Django 应用程序中实现基于 codepen javascript 的覆盖模式。 This codepen 包含我的模态的 HTML、CSS 和 Javascript 代码,并且是功能性的。正如您在我在下面发布的 HTML 中看到的那样,我有一个简单的页面,用户可以在其中查看捐赠,如果他们想查看它,可以单击查看按钮。单击此按钮时,我想在 codepen 中显示一个叠加层,但它不起作用。我不知道为什么。我将所有正确的 id 和类分配给元素,但我的程序没有做任何事情。可以请一些专家帮忙:)?我的 html 在下面。

{% extends 'suppliesbase.html' %}
{% load static %}
{% block content %}
    <div class="row">
        {% for donation in donations %}
        <div class="col-lg-4">
            <img class="thumbnail" src="{{donation.imageURL}}">
            <div class="box-element product">
                <h6><strong>{{donation.title}}</strong></h6>
                <hr>

                <a class="btn btn-outline-success" id="openModalBtn" href="#">View</a>
                
                <h4 style="display: inline-block; float: right"><strong>Free!</strong></h4>

            </div>
        </div>
        
        {% endfor %}
    </div>
  

{% endblock content %}



<div id="modal-overlay">
    <div id="modal">
      <div class="head">
        <a id="close-modal-button" href="javascript:;"></a>
      </div>
      <div class="content">Modal content</div>
    </div>
  </div>
  <script src="scripts.js"></script>

如果您有任何问题,请与我们联系。谢谢。

更新:

{% extends 'suppliesbase.html' %}
{% load static %}
{% block content %}
    <div class="row">
        {% for donation in donations %}
        <div class="col-lg-4">
            <img class="thumbnail" src="{{donation.imageURL}}">
            <div class="box-element product">
                <h6><strong>{{donation.title}}</strong></h6>
                <hr>

                <button class="btn btn-outline-success" id="openModalBtn" href="#">View</button>
                
                <h4 style="display: inline-block; float: right"><strong>Free!</strong></h4>

            </div>
        </div>
        
        
        {% endfor %}
    </div>
  


    <!--Modal Overlay Content -->
    <div id="modal-overlay">
    <div id="modal">
      <div class="head">
        <a id="close-modal-button" href="javascript:;"></a>
      </div>
      <div class="content">Modal content</div>
    </div>
  </div>
  <script>
        var openModalButton = document.getElementById("open-modal-button");
var closeModalButton = document.getElementById("close-modal-button");

var modalOverlay = document.getElementById("modal-overlay");
var modal = document.getElementById("modal");

// function that open modal and display the overlay
openModalButton.addEventListener("click", event => {

    modalOverlay.classList.add("modal-overlay-visible");
    modal.classList.add("modal-visible");

});


// function that closes the modal and remove the overlay
closeModalButton.addEventListener("click", event => {

    modalOverlay.classList.remove("modal-overlay-visible");
    modal.classList.remove("modal-visible");

});
    </script>
    

{% endblock content %}

【问题讨论】:

    标签: javascript html css django


    【解决方案1】:

    <html>
    
    <head>
    
    <style>
    #open-modal-button {
      width: 150px;
      display: block;
      margin: -25px 0 0 -75px;
      padding: 1em 0;
      position: absolute;
      top: 50%;
      left: 50%;
      font: 1.125em "Arial", sans-serif;
      font-weight: 700;
      text-align: center;
      text-decoration: none;
      color: #fff;
      border-radius: 5px;
      background: rgba(217, 67, 86, 1);
    }
    
    #modal-overlay {
      width: 100%;
      height: 100%;
      position: fixed;
      top: 0;
      left: 0;
      background: rgba(255, 257, 153, 0.75);
      visibility: hidden;
      opacity: 0;
      -webkit-transition: all 0.25s ease-in-out;
      -moz-transition: all 0.25s ease-in-out;
      -o-transition: all 0.25s ease-in-out;
      transition: all 0.25s ease-in-out;
    }
    
    #modal-overlay.modal-overlay-visible {
      visibility: visible;
      opacity: 1;
    }
    
    #modal {
      width: 600px;
      height: 400px;
      display: block;
      margin: 50% 0 0 -300px;
      position: relative;
      top: 50%;
      left: 50%;
      background: #fff;
      opacity: 0;
      -webkit-transition: all 0.5s ease-in-out;
      -moz-transition: all 0.5s ease-in-out;
      -o-transition: all 0.5s ease-in-out;
      transition: all 0.5s ease-in-out;
    }
    
    #modal.modal-visible {
      margin-top: -200px;
      opacity: 1;
    }
    
    .head {
      width: 90%;
      height: 32px;
      padding: 1.5em 5%;
      overflow: hidden;
      background: #01bce5;
    }
    
    #close-modal-button {
      width: 32px;
      height: 32px;
      display: block;
      float: right;
    }
    
    #close-modal-button::before,
    #close-modal-button::after {
      content: "";
      width: 32px;
      height: 6px;
      display: block;
      background: #fff;
    }
    
    #close-modal-button::before {
      margin-top: 12px;
      -webkit-transform: rotate(45deg);
      -moz-transform: rotate(45deg);
      -o-transform: rotate(45deg);
      transform: rotate(45deg);
    }
    
    #close-modal-button::after {
      margin-top: -6px;
      -webkit-transform: rotate(-45deg);
      -moz-transform: rotate(-45deg);
      -o-transform: rotate(-45deg);
      transform: rotate(-45deg);
    }
    
    .content {
      padding: 5%;
    }
    
    </style>
    
    </head>
    
    <body>
    
    <div>
        <div class="row">
            
            <div class="col-lg-4">
                <div class="box-element product">
                    <h6><strong>abcd</strong></h6>
                    <hr>
                    <a class="btn btn-outline-success" id="open-modal-button" href="#">View</a>
                    <h4 style="display: inline-block; float: right"><strong>Free!</strong></h4>
                </div>
            </div>
            
        </div>
        
        <div id="modal-overlay">
        <div id="modal">
          <div class="head">
            <a id="close-modal-button" href="javascript:;"></a>
          </div>
          <div class="content">Modal content</div>
        </div>
        </div>
      
    </div>
      
    
      
      
      <script>
      var openModalButton = document.getElementById("open-modal-button");
    var closeModalButton = document.getElementById("close-modal-button");
    
    var modalOverlay = document.getElementById("modal-overlay");
    var modal = document.getElementById("modal");
    
    // function that open modal and display the overlay
    openModalButton.addEventListener("click", event => {
    
        modalOverlay.classList.add("modal-overlay-visible");
        modal.classList.add("modal-visible");
    
    });
    
    
    // function that closes the modal and remove the overlay
    closeModalButton.addEventListener("click", event => {
    
        modalOverlay.classList.remove("modal-overlay-visible");
        modal.classList.remove("modal-visible");
    
    });
      
      </script>
    </body>
    
    </html>

    【讨论】:

    • 我将它包含在我的代码底部,但仍然没有任何反应。我会更新我的问题。
    • 更新了我的问题,仍然对为什么代码不起作用感到困惑
    • 嘿,如果你能帮我解决问题,我可以捐杯咖啡
    • 哈哈...不需要...我只更新了一条记录的答案...删除了for循环和其他python东西...您可以根据您的更新您的html pythonic方式需要...
    【解决方案2】:

    你应该把你的 HTML modal 和 script 标签放在你的{% block content %}

    在 Django 中,如果您 {% extends ... %} 基本模板并将任何代码放在 {% block .... %} 之外,它将不会包含在您的模板中,因为没有块可以包含该代码

    HTML 模型默认是隐藏的,只有在按下查看按钮时才可见,无论您将它们放在 HTML 代码的哪个位置。(如果将它们放在任何其他标签中,形状可能会有所不同)

    【讨论】:

    • 由于某种原因无法正常工作,文本模态内容仅在单击查看按钮时才会显示
    • 所以现在的问题是,模式总是在呈现 html 页面时出现......那么它的错误是你的模型......要么它配置不当,要么它有问题css 属性.....我不太擅长前端,但根据我的情况,你的模式缺少很多属性....如果你使用引导程序,这可能会有所帮助bootstrap modals
    • 我弄清楚了它出现的原因,并修复了它。一切正常,除了单击视图按钮时模式未打开。我怀疑它与javascript有关。我将更新我的问题以包含我当前的代码
    • 我已更新我的问题以包含我的代码
    • 如果您使用的是引导程序,您绝对应该检查我在上一条评论中提供的引导程序模式链接,您会知道我在说什么或者如果您正在编写自定义模型,那么对不起,我不是这方面的专家java脚本我总是从其他网站复制我的html代码,而codepen的sn-ps在我的情况下特别不起作用,它们只在他们的网站上工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2014-12-30
    • 2013-01-28
    • 2013-04-10
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多