引导Django在for循环中使用折叠 [英] bootstrap django using collapse within a for loop

查看:59
本文介绍了引导Django在for循环中使用折叠的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在遍历event_list,并希望显示每个条目的信息.但是我的 html 仅显示第一个条目,尽管我单击了任何条目.即,如果我单击绿色事件" ,它将展开"<我的婚礼" "卡身".我希望它为每个单独的条目展开单独的事件详细信息.我该怎么办?

I'm iterating through the event_list and want to display info for each entry. But my html only shows the first entry despite whatever entry I click on. i.e If i click on green event it expands the my wedding card-body. I want it to expand separate event details for each separate entry. How do I do that?

index.html

{% extends 'event/eventAdminBase.html' %}
{% load static %}

{% block content %}
{% if event_list %}


{% for events in event_list %}

<div id="accordion">


    <div class="card">

        <div class="card-header" id="headingOne">
            <h5 class="mb-0">
                <button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="false"
                        aria-controls="collapseOne">
                    Event Name :{{ events.event_name }}
                </button>
            </h5>
        </div>

        <div id="collapseOne" class="collapse " aria-labelledby="headingOne" data-parent="#accordion">
            <div class="card-body">

                <ul>

                    <li>

                        <p> Event Name :{{ events.event_name }}</p>
                        <p>Venue:${{ events.event_venue }}</p>
                        <p>Type:{{ events.event_type }} </p>
                        <form action="{% url 'event:event-delete' events.id %}" method="post" style="display: inline;">
                            {% csrf_token %}
                            <button type="submit" class="btn btn-default btn-sm">Delete</button>
                        </form>
                        <form action="{% url 'event:event-update' events.id %}" method="post" style="display: inline;">
                            {% csrf_token %}
                            <button type="submit" class="btn btn-default btn-sm">Update</button>
                        </form>


                    </li>


                </ul>

            </div>

        </div>

    </div>

</div>

{% endfor %}


{% else %}
<h1>No event entries found on the database.</h1>


{% endif %}

{% endblock %}

这就是我想要的

urls.py

django.conf.urls中的

from django.conf.urls import url

from event import views

app_name = 'event'

urlpatterns = [

    # /event/
    url(r'^$', views.IndexView.as_view(), name='index'),

    # event/event/entry
    url('event/entry/$', views.EventEntry.as_view(), name='event-entry'),

    # event/product/2
    url(r'^event/(?P<pk>[0-9]+)/$', views.EventUpdate.as_view(), name='event-update'),

    # event/product/(?P<pk>[0-9]+)/delete
    url(r'^album/(?P<pk>[0-9]+)/delete$', views.EventDelete.as_view(), name='event-delete'),

]

views.py

从django.views中的

from django.views import generic
from django.views.generic.edit import CreateView, UpdateView, DeleteView

from django.urls import reverse_lazy
# Create your views here.
from event.models import Event


# view for the index page
class IndexView(generic.ListView):
    # name of the object to be used in the index.html
    context_object_name = 'event_list'
    template_name = 'event/index.html'

    def get_queryset(self):
        return Event.objects.all()


# view for the event entry page
class EventEntry(CreateView):
    model = Event
    # the fields mentioned below become the entry rows in the generated form
    fields = ['event_name', 'event_venue', 'event_type']


# view for the event update page
class EventUpdate(UpdateView):
    model = Event
    # the fields mentioned beindexlow become the entyr rows in the update form
    fields = ['event_name', 'event_venue', 'event_type']


# view for deleting a event entry
class EventDelete(DeleteView):
    model = Event
    # the delete button forwards to the url mentioned below.
    success_url = reverse_lazy('event:index')

edit:是否可以使用 {{forloop.counter}} 来操纵 html ?

edit : is there any way to manipulate the html with {{ forloop.counter }}?

推荐答案

这是一个简单的解决方案. card-body id 需要更改.

It was a simple solution. The id of the card-body needed to be changed.

{% extends 'event/eventAdminBase.html' %}
{% load static %}

{% block content %}
{% if event_list %}


{% for events in event_list %}

<div id="accordion">


    <div class="card">

        <div class="card-header" id="heading{{ events.id }}">
            <h5 class="mb-0">
                <button class="btn btn-link" data-toggle="collapse" data-target="#collapse{{ events.id }}" aria-expanded="false"
                        aria-controls="collapseOne">
                    Event Name :{{ events.event_name }}
                </button>
            </h5>
        </div>


        <div id="collapse{{ events.id }}" class="collapse " aria-labelledby="heading{{ events.id }}" data-parent="#accordion">
            <div class="card-body">

                <ul>

                    <li>

                        <p> Event Name :{{ events.event_name }}</p>
                        <p> Venue:${{ events.event_venue }}</p>
                        <p> Type:{{ events.event_type }} </p>
                        <form action="{% url 'event:event-delete' events.id %}" method="post" style="display: inline;">
                            {% csrf_token %}
                            <button type="submit" class="btn btn-default btn-sm">Delete</button>
                        </form>
                        <form action="{% url 'event:event-update' events.id %}" method="post" style="display: inline;">
                            {% csrf_token %}
                            <button type="submit" class="btn btn-default btn-sm">Update</button>
                        </form>


                    </li>


                </ul>

            </div>

        </div>

    </div>


</div>
{% endfor %}


{% else %}
<h1>No event entries found on the database.</h1>


{% endif %}

{% endblock %}

这篇关于引导Django在for循环中使用折叠的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆