首页 > 解决方案 > 如何将通用视图转换为具有模式列表的基于类的视图

问题描述

我正在尝试将通用视图转换为基于类的视图,以便在我的代码中获得更好的可读性。

由此我希望能够创建一个函数,以便我可以显示列表中各个项目的模式。我是 django 的新手,所以我不知道我可以尝试什么,我已经在网上搜索并阅读了文档,但没有任何运气。

我目前正在使用的视图:


    def my_booking_list(request):
        booking_lab = Reservation.objects.filter(username=request.user.username).order_by('-id')
        key = settings.STRIPE_PUBLISHABLE_KEY
        print(booking_lab)
        return render(request, 'my_booking_list.html', {'booking_labs': booking_lab, 'key': key})

基于类的视图我不知道我在做什么(我至少在正确的轨道上吗?):


    class MyBookingsView(ListView):
        def get(self,request ,pk):
            booking_lab = Reservation.objects.filter(username=request.user.username).order_by('-id')
            key = settings.STRIPE_PUBLISHABLE_KEY
            print(booking_lab)
            return render(request, 'my_booking_list.html', {'booking_labs': booking_lab, 'key': key})

模板(部分):


                                        {% if booking_labs %}
                                        {% for lab in booking_labs %}
                                        <div class="tg-dashboardservices">
                                            <div class="tg-dashboardservice">
                                                <div class="tg-servicetitle">
                                                    <h2><a href="#" data-toggle="modal" data-target=".tg-categoryModal">{{lab.lab.name}}</a>
                                                        {% if lab.status == 'Accepted' %}
                                                        <span>({{lab.status}})</span>
                                                        {% elif lab.status == 'Requested' %}
                                                        <span>({{lab.status}})</span>
                                                        {% elif lab.status == 'Denied' %}
                                                        <span>({{lab.status}})</span>
                                                        {% endif %}</h2>
                                                </div>
                                                <div class="tg-btntimeedit">
                                                    <span>{{lab.price}}</span>
                                                    <button class="tg-btnedite"><a data-toggle="modal"
                                                                                   data-target=".tg-categoryModal">
                                                        <i class="lnr lnr-pencil"></i></a>
                                                    </button>
                                                    <button class="tg-btndel"><a><i class="lnr lnr-trash"></i></a>
                                                    </button>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </fieldset>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    {%for lab in booking_labs%}
    <!--************************************
            Theme Modal Box Start
    *************************************-->
    <div class="modal fade tg-invoicemodal tg-categoryModal" tabindex="-1">
        <div class="modal-dialog tg-modaldialog" role="document">
            <div class="modal-content tg-modalcontent">
                <div class="tg-modalhead">
                    <h2>Details</h2>
                    <ul class="tg-btnaction">
                        <li class="tg-delete"><a href="#"><i class="lnr lnr-trash"></i></a></li>
                    </ul>
                </div>
                <div class="tg-modalbody">
                    <ul class="tg-invoicedetail">
                        <li><span>Lab Booked:</span><span>{{lab.lab.name}}</span></li>
                        <li><span>Company Name:</span><span>{{lab.lab.company}}</span></li>
                        <li><span>Amount:</span><span>${{lab.lab.price}}.00</span></li>
                        <li><span>Payment Method:</span><span>Stripe</span></li>
                        <li><span>Booking Status:</span>
                            {% if lab.status == 'Accepted' %}
                            <span>{{lab.status}}</span>
                            {% elif lab.status == 'Requested' %}
                            <span>{{lab.status}}</span>
                            {% elif lab.status == 'Denied' %}
                            <span>{{lab.status}}</span>
                            {% endif %}
                        </li>
                        <li><span>Booking Dates:</span>
                            <span>From:&nbsp;{{lab.CheckInDate}} {{lab.CheckInTime}} </br>
                                To:&nbsp;{{lab.CheckOutDate}} {{lab.CheckOutTime}}</span>
                        </li>
                        <li><span>Name:</span><span>{{lab.lab.contact_person}}</span></li>
                        <li>
                            <span>Address:</span><span>{{lab.lab.street_address}}, {{lab.lab.city}}, {{lab.lab.country}}</span>
                        </li>
                        <li><span>Message:</span><span>{{lab.message}}</span></li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
    {% endfor %}
    <!--************************************
                Theme Modal Box End
    *************************************-->
    {% endfor %}
    {% endif %}

代码当前显示模态4次,彼此重叠,我可以单击模态以清除它们,我知道这是因为模态之前的for循环。我试图实现单击列表中的一项以显示其模式。

标签: djangodjango-templatesdjango-views

解决方案


您可以浏览django 文档

在列表视图中,只需指定模型并按计数分页。如果您想手动过滤查询集,请覆盖 get_queryset() 乐趣。默认情况下,查询集的上下文对象名称将为列表视图的object_list,因此在模板循环中object_list。如果要更改它,请指定 context_object_name 变量。


推荐阅读