【问题标题】:Dynamically created accordions not functioning correctly in Django/python/html project [closed]动态创建的手风琴在 Django/python/html 项目中无法正常工作[关闭]
【发布时间】:2016-06-30 17:08:51
【问题描述】:

我正在尝试构建一个 html 模板作为 Django 项目的一部分。它将包含动态手风琴(此类手风琴的数量由从views.py传递给它的值确定),并且每个手风琴中的内容也将从views.py动态传递(我什至还没有构建这部分)。

我试过谷歌搜索,但总是以两种情况之一结束。所有手风琴按钮仅打开/关闭第一个手风琴的地方。第二,手风琴按钮都不起作用。理想情况下,所有手风琴按钮都应该可以工作,并且每个按钮都需要打开/关闭自己的内容。我猜问题在于动态引用包含内容的 div。但我无法修复。

请帮忙!

代码:

<div class="container">
  <h2>Mock Tests</h2>
  <p>Click the category you wish to view.</p>
  @{int i=0;}
  {% for s in sections %}
  <div class="panel-group" id="accordion_@i">
    <div class="panel panel-default" id="panel_@i">
      <div class="panel-heading">
        <h4 class="panel-title">
          <button type="button" class="btn btn-info" data-toggle="collapse" data-target="#collapseone_@i" href="#collapseOne_@i">{{ s.s_name }}</button>
        </h4>
      </div>
      <div id="collapseOne_@i" class="panel-collapse collapse in">
        <div class="panel-body">{{ s.s_name }}</div>
      </div>
    </div>
  </div>
  i++;
    {% endfor %}
  </div>

修改代码:

{% block body %}
<div class="container">
  <h2>Mock Tests</h2>
  <p>Click the category you wish to view.</p>

  <div class="panel-group" id="accordion">
    {% for s in sections %}
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <button type="button" class="btn btn-info" data-parent="#accordion" data-toggle="collapse" data-target="accordion_{{ forloop.counter }}" href="accordion_{{ forloop.counter }}">{{ s.s_name }}</button>
        </h4>
      </div>
      <div id="accordion_{{ forloop.counter }}" class="panel-collapse collapse in">
        <div class="panel-body">{{ s.s_name }}</div>
      </div>
    </div>
  {% endfor %}
  </div>    
  </div>

【问题讨论】:

  • 您似乎在随机尝试使用来自 Django 中完全不同模板系统的语法。您需要实际阅读文档,并使用 Django 的语法。
  • @Sayse 这不是一个好的副本;所有的 OP 需求都是forloop.counter
  • @DanielRoseman - 是的,我在真正考虑其用法之前写了该评论(请注意,这不是它被投票反对的内容)。我将其包含在内,因为这似乎是 op 使用他们的 I 变量所做的事情
  • @DR - 我实际上是从一个代码开始的,但尝试了我在网上找到的任何有用的语法,老实说,我没有看到提出原始语法的意义,因为它本身不起作用而且结构&逻辑大体相同。我添加了 i 变量,因为我试图从这篇文章中收集一些有用的东西:stackoverflow.com/questions/30613968/… 如果不是太麻烦,你能告诉我正确的语法吗?

标签: python html django twitter-bootstrap


【解决方案1】:

我不知道@{int i=0;} 应该做什么,但是您要么需要使用 for 循环并使用该索引查找一个部分,要么您可以使用 forloop 计数器,或者只是给出id是一个更好的名字

id="accordion_{{ forloop.counter }}"
id="accordion_{{ forloop.counter0 }}"
id="accordion_{{ s.s_name }}"

任何一个都足够了。

【讨论】:

  • 嗨,Sayse,我已经尝试使用您建议的 id。渲染显示所有这些都是扩展的,并且没有一个按应有的方式收缩。你能告诉我我在这里做错了什么吗?
  • 我已经在问题中写了最新的修改代码。
猜你喜欢
  • 1970-01-01
  • 2015-01-16
  • 2018-08-21
  • 1970-01-01
  • 2021-06-15
  • 2021-10-03
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多