You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

登录后用户预订内容无法显示问题排查求助

登录后无法显示个人预订内容的问题排查及修复

核心问题分析

1. 模板与视图的变量名不匹配

视图中传给模板的变量是my_bookings,但模板循环遍历的是bookings,变量名不一致直接导致模板无法获取到数据,这是内容不显示的关键原因。

2. 视图中错误使用filter函数

你写的my_bookings = filter(self, booking)是完全错误的用法:filter()是Python内置的序列过滤函数,而Booking.objects.filter(user=request.user)已经直接返回了当前用户的所有预订QuerySet,不需要额外处理。

3. ListView用法不规范

既然继承了generic.ListView,更合理的方式是重写get_queryset方法来过滤用户数据,而非直接重写get方法,这样能复用ListView自带的逻辑,代码更简洁规范。

4. HTML模板结构错误

{%endfor%}闭合标签放在了.card-text内部,且多个外层div(如<div class="row">、<div class="col-md-3 mt-5 offset-md-3">)未正确闭合,会导致页面结构混乱,即使数据正确也无法正常渲染。

修正后的代码示例

视图代码(views.py)

class ListBookingView(generic.ListView):
    """
    显示当前登录用户的所有预订,支持编辑或删除
    """
    model = Booking
    template_name = 'my_bookings.html'
    context_object_name = 'bookings'  # 指定模板中使用的变量名,与模板循环名保持一致

    def get_queryset(self):
        # 仅返回当前登录用户的预订数据
        if self.request.user.is_authenticated:
            return Booking.objects.filter(user=self.request.user)
        return Booking.objects.none()  # 未登录时返回空集合

    def dispatch(self, request, *args, **kwargs):
        # 未登录用户直接重定向到登录页
        if not request.user.is_authenticated:
            return redirect('account_login')
        return super().dispatch(request, *args, **kwargs)

模板代码(my_bookings.html)

{% extends "base.html" %}

{% block content %}

<section id="booking" class="book_a_table">
    <div class="booking_container">
        <h2>My Bookings:</h2>
        <p>To edit or cancel a booking please click on the buttons below.</p>
        <div class="row">
            {% for booking in bookings %}
            <div class="col-md-4 mt-5">
                <div class="card mb-4">
                    <div class="card-body">
                        <h4 class='card-title text-uppercase text-center'>{{ booking.date }} at {{ booking.time }}</h4>
                        <h6 class="text-uppercase">{{ booking.name }}</h6>
                        <div class='card-text'>
                            <p><i class="fas fa-phone"></i> {{ booking.phone }}</p>
                            <p><i class="far fa-envelope"></i> {{ booking.email }}</p>
                            <p>Number of People: {{ booking.number_of_people }}</p>
                        </div>
                        <!-- 可在此添加编辑/删除按钮 -->
                        <!-- <a href="{% url 'edit_booking' booking.id %}" class="btn btn-primary">Edit</a> -->
                        <!-- <a href="{% url 'delete_booking' booking.id %}" class="btn btn-danger">Delete</a> -->
                    </div>
                </div>
            </div>
            {% empty %}
            <!-- 无预订时显示提示 -->
            <div class="col-12 text-center mt-5">
                <p>You have no bookings yet.</p>
            </div>
            {% endfor %}
        </div>
    </div>
</section>

{% endblock %}

内容的提问来源于stack exchange,提问作者user17432469

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 06:45:42