gpt4 book ai didi

python - 在 Django 中的不同 View 之间传递数据

转载 作者:行者123 更新时间:2023-11-28 21:31:06 24 4
gpt4 key购买 nike

我有一个基本 View ,可以检索一些数据、呈现我的页面并将一些数据发送到该页面:

def myview(request)

one = values.objects.get(user=request.user).address
two = values.objects.get(user=request.user).number

return render(request, "main/mytemplate.html",
context={'address': one, 'numbers': two})

所以这两个查询检索到的值显示在我的页面上。

现在,在名为 mytemplate.html 的同一页面上,我正在使用另一个 View ,它应该处理表单和一些其他操作:

def secondview(request):

if request.method == 'POST':
if 'button1' in request.POST:
form = MyForm(request.POST)
# check whether it's valid:
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.save()
return HttpResponseRedirect(request.path_info)


else:
form = MyForm()

return HttpResponse('it works!')

我如何在第二个 View 中使用这两个查询检索到的数据?当第一个 View 加载页面时执行查询。然后,在同一页面中使用第二个 View 。我想在第二个 View 中使用两个变量 onetwo。有没有办法在 Django 中做到这一点?

为什么不在第二个 View 中进行相同的查询?因为我希望第二种形式在重新加载方面尽可能快,而不必每次都进行数据库查询使用该 View 的时间。另外,由于我已经在打开页面时检索到这些值,所以再次这样做是一种浪费。

我不知道这个问题是否足够清楚,但它的核心是:我可以在 django 中的两个 View 之间传递变量/数据吗?

最佳答案

你有几个选择:

  1. 最简单的方法:将此数据包含在对第二个 View 的请求中(作为表单数据的一部分,请参阅下面的 example)。您甚至可以使用单一 View :如果发送 POST - 存储数据,否则请求并将其显示在页面上。
  2. 为此使用缓存(参见下面的 example)- 但我建议使用 Django built-in package .这是一个 basic example how to use it
  3. 使用Django Sessions (请参阅下面的 example)- 尽管它们有其他用途,但它是可行的选择。当加载客户时,Django 将加载完整的 session 记录,因此您将在 request.session 变量中拥有所有数据。但这是不好的做法:您会得到大量的数据重复并增加数据库内存消耗。
  4. 将 API(例如使用 DjangoRestFramework )与常用的 Django 应用程序一起使用。因此,您只会在需要时获得所需的数据。这些 API 请求也可以被缓存,因此这是一个快速的解决方案。

关于python - 在 Django 中的不同 View 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com