在使用 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)
并得到了<WSGIRequest: POST '/hotel/detail/caesars-palace/'>
,在这种情况下,'caesars-palace' 是 slug 值。
我在另一个网站上发现了这个comment-'你好!非常感谢您的帮助 ! :D 嗯,所以它们之间的区别在于,当您开始使用 HttpResponse 时,您将发送带有 url 的上下文字典,以便呈现为典型的网站,但如果您使用 HttpResponseRedirect,则只能发送 url ...?我是否以正确的方式得到这个? :D?.... 再次感谢您的帮助 :D'
如果这是正确的,那么我将无法解决 HttpResponseRedirect 的问题。
【讨论】:
以上是关于在使用 HttpResponseRedirect 时添加字典值的主要内容,如果未能解决你的问题,请参考以下文章
在 Django 中使用 HttpResponseRedirect 传递参数
使用 Django 重定向和 HttpResponseRedirect 有啥区别?
为啥 Django 的 HTTPResponseRedirect 使用相同的 HTTP 方法进行 PUT 而不是 POST?
django:通过 HttpResponseRedirect 传递发布的文件