首页 > 解决方案 > 在Django的http请求中多次重定向到一个具有不同参数的站点

问题描述

如何使用 HTTP 正文中的不同参数处理多个重定向到一个站点?在我的代码中,我有一个带有 HTTP 重定向的循环......它应该循环并使用不同的参数进行多次重定向,因为我有不同的参数。但它只是进行一次性重定向并转到这个网站,所以我最终只得到一个重定向而不是多个重定向。我真的对简单的顺序重定向很感兴趣,没有什么比并行多线程更难的了。我在视图中的代码如下所示:

for code in codes:
            print(code)

            base_url = 'https://base_url/'
            code_part = 'code={}'.format(code)
            url = '{}?{}'.format(base_url, code_part)
            return redirect(url)

我考虑过将它封装到父子函数中,随着列表结构的变化,它会多次处理自己,但我认为我最终会得到与正常 for 循环相同的结果。另外,我看到了重定向应用程序,但我不确定它是否有助于我完成这项确切的任务。我如何实现它并不重要,但只要我调用重定向,程序就会退出到外部网站并且功能停止。

更新 我被要求提供更多代码,因此有助于回答我的问题。但这就是问题,我的视图函数中只有相关的代码,我将其包含在问题中,而我此时正在考虑如何解决这个问题,所以我目前没有任何其他代码。不幸的是:(任何朝着正确方向的推动都会非常有帮助。谢谢!

更新 不幸的是,Django 的重定向应用程序不适合对具有不同参数的一个站点进行许多查询。它假设处理 404 错误,并在其表中创建移动的永久链接......

标签: pythondjangodjango-views

解决方案


我在您的代码中看到的唯一问题是缩进。我只是重写了你的代码,所以它更简单一些。redirect()也许问题出在您在循环结束时返回的调用方法中。

for code in codes:
    print(code)
    return redirect(f'https://base_url/?{code}')

而且当你返回一些东西时,你实际上退出了整个函数。这意味着无论你的 for 循环属于哪个函数,实际上都会停止,并且 for 循环永远不会比第一次迭代更进一步。

因此,如果您想要每个代码的结果,那么您应该改为这样编写:

results = []
for code in codes:
    print(code)
    results.append(redirect(f'https://base_url/?{code}'))
return results

推荐阅读