如何将具有模式列表的通用视图转换为基于类的视图

时间:2019-07-17 05:45:31

标签: django django-templates django-views

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

由此,我希望能够创建一个函数,以便可以显示列表中各个项目的模态。我是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循环。我正在尝试单击列表中的一个项目以显示其模式。

1 个答案:

答案 0 :(得分:0)

您可以通过django docs

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