python - 刷新时的 HTML 输入表单重定向不应初始化变量
问题描述
我正在构建一个应用程序,其中 API 搜索您输入到表单中的一些信息。当我单击刷新时,Chrome 中会出现一个烦人的弹出窗口,要求重新发送信息。经过一段时间的谷歌搜索后,我发现您必须使用 HttpResponseRedirect 来避免这种情况。不幸的是,它杀死了所有变量,我无法推导出其中任何一个。此外,我必须实例化局部变量以避免将其放入“上下文”中的错误,因为如果不按表单中的“提交”按钮,尚未定义变量。实例化也会杀死变量。还尝试使用全局变量,但随后可以跨用户查看数据。现在我没有想法了。保留变量中的信息会很好。
代码:
def realestate(request):
context = {}
json = {}
coordinates = {}
pages = 0
rent = 0
address_save = ""
radius_save = ""
address = ""
if request.method == 'POST':
address = request.POST.get('address')
radius = request.POST.get('radius')
# call the api only if adress or radius changed
if address != address_save or radius != radius_save:
pageNumber = request.POST.get('pageNumber')
# receive coordinates from goodle
coordinates = googleGeoApi(address)
# search real estate with coordinates from immoscout24
json, pages = search_api(pageNumber, coordinates, radius)
# calculate rent with search from immoscout24
rent = calculateRent(coordinates, radius)
address_save = address
radius_save = radius
return HttpResponseRedirect(request.path_info)
context = {'json': json, 'coordinates': coordinates, 'pages': pages, "rent": rent, "address": address}
return render(request=request, template_name='realestate/realestate.html', context = context)
解决方案
您可以将参数添加到查询字符串并request.path_info
在重定向之前将其附加到。然后,为清楚起见,我将添加:
elif request.method == 'GET':
并从 GET 参数填充您的上下文。这有点繁琐,但它会满足你的要求。
推荐阅读
- flutter - 如何在 Flutter 中自定义底部导航栏项?
- safari - Google DoubleClickStudio - 视频源文件
- nodejs-server - 当我在 aws 服务器上更新我的项目时,所有图像 url 都停止工作
- android - NavHostFragment.findNavController 无法应用于片段错误
- android - 无法获取'https://dl.bintray.com/drummer-aidan/maven/com/afollestad/easyvi../0.3.0/easyvideoplayer-0.3.0。收到状态码 403 ...: Forbidden
- azure - 如何在 azure 逻辑应用程序中将 blob 中的 .txt 文件作为电子邮件的附件发送
- mongodb - 使用mongoose在mongodb中按升序和降序对多个字段进行排序
- html - 编辑托管在 github 页面上的 index.html
- sql - 如何根据选择返回列或将其添加为存储过程中的参数
- ios - iOS 模拟器的屏幕录像去哪了?