Django TemplateView 的模板中没有显示数据

问题描述 投票:0回答:1

我是 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."

所以我认为我的功能存在重大错误。

我不知道如何将我的序列化器数据获取到模板,但我希望当我发现我犯了什么小学生错误时我会踢自己

django output
1个回答
0
投票

对于模板视图,不需要也不推荐使用序列化器。您只需传递

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>
© www.soinside.com 2019 - 2024. All rights reserved.