【问题标题】:Django, move variablesDjango,移动变量
【发布时间】:2014-12-29 20:29:24
【问题描述】:

我有一个标准的 django 应用程序。在一个视图中(让我们先命名它)我调用一个 HttpResponseRedirect(到名为 Second 的视图)但是有一些数据我想传输到 Second 视图。为了实现这一目标,我有哪些选择?

一种方法是设置 GET 参数,但这不是一个好的解决方案。

我也可以设置一个会话变量,但这也不是最好的解决方案。

我还有其他可能吗?例如,我可以使用一些上下文处理器或类似的东西吗?

我的问题可能不包含所有信息,但我希望有人能给我一个好的提示。

【问题讨论】:

  • 希望您不介意,我稍微修改了您的英语:我们不会在“我有什么选择”之类的短语中使用缩写词。
  • 嗨,不,谢谢,我阅读了更正。我的母语不是英语,所以至少我从中学到了:-)。

标签: python django middleware


【解决方案1】:

我不确定您为什么说会话变量不是最佳解决方案。相反,它们绝对是执行此操作的正确解决方案。

在第一个视图中,您可以简单地执行request.session['first_data'] = my_data,在第二个视图中,您可以执行my_data = request.session.pop('first_data')

【讨论】:

  • 是的,这个解决方案有效。这是事实,但我想知道我可以使用其他任何可能性吗?当然它发生了很多次,所以最后我会使用上下文处理器来处理会话变量,但我还是很好奇。我没有发现任何其他可能性。
  • 其次,如果您从同一页面打开更多实例,我对会话不太满意。
  • 显然第二个函数知道它需要什么数据。因此,它应该将此信息作为参数,因此您应该通过reverse 执行此操作 - 会话对于信息的长期缓存很有用,但对于即时函数调用,无需进行 db 命中。跨度>
  • 不,第二个不知道。超出了它。 Second type 视图有很多,所以逻辑应该超出这个。如果我使用会话,我可以使用上下文处理器。
【解决方案2】:

我假设第二个视图需要一些参数,这些是您想要传递的。您应该使用 reverse() 函数来传递它们 - 它会创建一个 url,并且参数将放在需要它们的地方。例如,如果second 是一个带有两个参数的函数,你可以这样做:

HttpResponseRedirect( reverse (second, urlconf = "myapp.urls", args = ['foo arg', 2]))

如果您要传递的数据与second 函数的参数不对应,那么会话可能是一个合理的后备方案——但是您必须问自己,为什么不呢?

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 2010-11-08
    • 2018-03-11
    • 2020-03-22
    • 2021-11-02
    • 2021-08-11
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多