在使用 HttpResponseRedirect 时添加字典值

Posted

技术标签:

【中文标题】在使用 HttpResponseRedirect 时添加字典值【英文标题】:Adding dictonary values while using HttpResponseRedirect 【发布时间】:2022-01-04 22:49:02 【问题描述】:

我想重定向到现有页面并显示一个查询集,该查询集将根据通过表单提交的值确定。我从函数 get_context_data 获得的字典值正确显示。我尝试在post 函数中添加的字典值无法正确显示。

def post(self, request, *args, **kwargs):
    RoomBookingsForm    = BookRoomsForm(request.POST or None)
    self.object = self.get_object() # assign the object to the view
    context = self.get_context_data( *args, **kwargs)

    context.update('room_type_queryset': RoomType.objects.all().filter())

    print("all context values")
    print(context)

    if request.method == 'POST':
    
        return HttpResponseRedirect(self.request.path_info, context )
       

还有context.update我也试过context['room_type_queryset'] = RoomType.objects.all().filter()

根据上面我得到的两个打印语句

all context values
'object': <AmericanHotel: Caesars Palace>, 'americanhotel': <AmericanHotel: Caesars Palace>, 'slug': 'caesars-palace', 'view': <hotel.views.HotelDetailSlugView object at 0x00000210575117F0>, 'cart': <Cart: 5>, 'hotel_extra_photos': <QuerySet [<AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>, <AmericanHotelPhoto: Caesars Palace>]>, 'room_type': <QuerySet [<RoomType: Caesars Palace, Triple>, <RoomType: Caesars Palace, Double>]>, 'room_type_queryset': <QuerySet [<RoomType: Caesars Palace, Double>, <RoomType: Caesars Palace, Triple>]>

room_type 的结果正确显示为红色。

% for instance in room_type %
     <H1 style="color:red">instance</H1>
% endfor %

room_type_queryset 的结果不会出现。

% for instance in room_type_queryset %
    <H1 style="color:blue">instance</H1>
% endfor %

更新

我对我的代码做了一些修改,但根据屏幕截图你可以看到我仍然有问题。

   def post(self, request, *args, **kwargs):
            RoomBookingsForm    = BookRoomsForm(request.POST or None)
            self.object = self.get_object() # assign the object to the view
            context = self.get_context_data( *args, **kwargs)
            context['room_type_results'] = RoomType.objects.all().filter()
<h1>Will the results appear</h1>
<h1>room_type_results</h1>
<p1>room_type_results</p1>
room_type_results
<h1>End of will the results appear</h1>

【问题讨论】:

如果你在浏览器中打开开发者工具,你能找到room_type_queryset的结果吗?您是否尝试过其他名称(不带_queryset)或其他颜色? 不幸的是我已经尝试了这两个建议。 您是否检查了开发人员工具(Ctrl + Shift + I)?你能显示整个字典(没有 for 循环,只有

标签中的整个原始 json)吗?

【参考方案1】:

或许可以试试:

some_form = request.POST.get("form_name")

【讨论】:

【参考方案2】:

我最终使用了

return render(request, self.template_name,context)

我没有意识到这种方法不会改变 URL。因此,使用这种方法意味着我仍然可以访问 slug 值。

我做了print(request) 并得到了&lt;WSGIRequest: POST '/hotel/detail/caesars-palace/'&gt;,在这种情况下,'caesars-palace' 是 slug 值。

我在另一个网站上发现了这个comment-'你好!非常感谢您的帮助 ! :D 嗯,所以它们之间的区别在于,当您开始使用 HttpResponse 时,您将发送带有 url 的上下文字典,以便呈现为典型的网站,但如果您使用 HttpResponseRedirect,则只能发送 url ...?我是否以正确的方式得到这个? :D?.... 再次感谢您的帮助 :D'

如果这是正确的,那么我将无法解决 HttpResponseRedirect 的问题。

【讨论】:

以上是关于在使用 HttpResponseRedirect 时添加字典值的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中使用 HttpResponseRedirect 传递参数

使用 Django 重定向和 HttpResponseRedirect 有啥区别?

为啥 Django 的 HTTPResponseRedirect 使用相同的 HTTP 方法进行 PUT 而不是 POST?

django:通过 HttpResponseRedirect 传递发布的文件

django HttpResponseRedirect 没有重定向

Django 和 urls.py:如何通过命名 url 进行 HttpResponseRedirect?