首页 > 解决方案 > 刷新时的 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)

标签: pythonhtmldjango

解决方案


您可以将参数添加到查询字符串并request.path_info在重定向之前将其附加到。然后,为清楚起见,我将添加:

elif request.method == 'GET':

并从 GET 参数填充您的上下文。这有点繁琐,但它会满足你的要求。


推荐阅读