我是 Djago 新手,正在尝试显示列表中对象的详细信息。除了没有显示细节的小问题之外,下面的代码一切正常。
这是我的观点 `类 PieceDetail(TemplateView): template_name = '橱柜/piece_detail.html'
def get_context_data(self, **kwargs):
id = kwargs.get('pk')
piece = get_object_or_404(Piece, pk=id)
pprint(piece.pk)
serializer = PieceSerializer(piece)
pprint(serializer.data)
return {'serializer': serializer, 'cabinets/piece_detail': piece.pk}
Here is the url
path('piece_detail/int:pk/',views.PieceDetail.as_view(),name = 'piece_detail'),`
这是html
{% extends "shared/base.html" %}
{% load static %}
{% block content %}
</br>
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
<div class="btn-toolbar mb-2 mb-md-0">
<div class="btn-group me-2">
<a href="/cabinet/piece_list" ><button class="btn btn-primary"> Back </button></a>
</div>
</div>
<br class="modal-body py-0">
<p>{{ serializer.data.id }}</p>
<div class="container">
<div class="form-group">
{{ piece.description }}
</div>
<div class="form-group">
{{ piece.quantity }}
</div>
</div>
</div>
<p>The quantity shown is that usually used during construction of components</p>
</div>
{% endblock %}
这是终端上显示所选详细信息的一些 pprint 输出 1 {'描述': '门轨', '数量': 2} [2023年11月3日12:16:05]“获取/cabinet/piece_detail/1/HTTP/1.1”200 14603
我尝试了各种不同的方法来将数据从视图获取到模板,但它似乎仍然丢失。
如果我使用 APIVIew 并向 get_context_data 调用添加请求参数,我会收到消息
"detail": "Method \"GET\" not allowed."
所以我认为我的功能存在重大错误。
我不知道如何将我的序列化器数据获取到模板,但我希望当我发现我犯了什么小学生错误时我会踢自己
对于模板视图,不需要也不推荐使用序列化器。您只需传递
Piece
对象即可。事实上你也不需要使用 get_context_data
。这是可以由 DetailView
[Django-doc]: 处理的所有样板代码
from django.views.generic.detail import DetailView
class PieceDetail(DetailView):
template_name = 'cabinets/piece_detail.html'
# no get_context_data
然后在模板中,我们将其渲染为:
<br class="modal-body py-0">
<p>{{ object.pk }}</p>
<div class="container">
<div class="form-group">
{{ object.description }}
</div>
<div class="form-group">
{{ object.quantity }}
</div>
</div>