django - 如何将通用视图转换为具有模式列表的基于类的视图
问题描述
我正在尝试将通用视图转换为基于类的视图,以便在我的代码中获得更好的可读性。
由此我希望能够创建一个函数,以便我可以显示列表中各个项目的模式。我是 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: {{lab.CheckInDate}} {{lab.CheckInTime}} </br>
To: {{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循环。我试图实现单击列表中的一项以显示其模式。
解决方案
您可以浏览django 文档
在列表视图中,只需指定模型并按计数分页。如果您想手动过滤查询集,请覆盖 get_queryset() 乐趣。默认情况下,查询集的上下文对象名称将为列表视图的object_list,因此在模板循环中object_list。如果要更改它,请指定 context_object_name 变量。
推荐阅读
- bash - 我想编写一个在多个新终端中启动命令的 bashrc 别名
- amazon-web-services - 从 Amazon RDS for MySQL 到 Amazon Aurora for PostgreSQL 的数据复制
- python - Azure Function Python - ProcessPoolExecutor 无响应且函数主机最终超时
- python - base64 解码输出具有非 ASCII 字符
- python - Django 1.4 如何自定义 MultipleChoiceField 中的元素
- clojure - 保存后如何自动运行命令lein run?
- node.js - 无法在 NodeJS 内的 eventEmitter 内发送 UDP 数据包
- wordpress - 如何将我的 JavaScript 文件与 WordPress 中的 enqueue 正确链接
- scala - 隐式类不适用于通用类型
- docker - 通过 Docker-Compose 为 ElasticSearch 使用持久主机卷