【问题标题】:Django want to use a variable from another viewDjango想使用另一个视图中的变量
【发布时间】:2011-02-09 16:22:29
【问题描述】:

我在名为 client_items 的视图中有一个项目列表。我希望能够使用变量 items_list`,这是 client_items 中另一个名为 edit_order 的视图。那么有没有办法从不同的视图调用变量? (从另一个视图导入一个变量并能够在另一个视图中使用这个变量)我不能只在 client_items 视图中编写它,因为它需要一个 order_no 扩充。

编辑:这是我的最新观点。我尝试创建另一个名为 items_in_edit_order 的视图。此时我得到`order_no not defined。

    def items_in_edit_order(order_no):
        order = models.Order.objects.get(pk = order_no)
        return order

def client_items(request, client_id = 0):
    client = models.Client.objects.get(pk = client_id)
    items = client.storageitem_set.all()
    order = items_in_edit_order(order_no)
    return render_to_response('items.html', {'items':items, 'client':client, 'order':order}, context_instance = RequestContext(request))

【问题讨论】:

标签: django templates variables views


【解决方案1】:

只是补充一下,因为没有人这么说,你似乎还不明白这一点:

您的client_items 视图必须以某种方式访问​​order_no 变量。如果由于某种原因该值没有通过 URL 传递,则它必须从某个地方获取该值。只有三个真实的位置可以得到这个值:

  1. 数据库:例如,如果您要存储直接链接到用户的购物车之类的东西,这将起作用。因此,例如,您可以执行order_no = Order.objects.filter(cart__user=request.user).order_no 之类的操作,获取与用户当前购物车关联的订单,然后返回order_no 值。
  2. 会话:您将 order_no 存储在会话中。这将假设您有一个较早的视图,其中设置了 order_no 的值,此时您将使用 request.session['order_no']=order_no 保存它。稍后,当您想要检索该值时,您只需在视图中使用order_no=request.session['order_no']
  3. Cookie:不是很推荐,但仍然是一个选项。这很复杂,因为在第一个视图中,您必须创建响应对象(如resp = render_to_response(template_name, locals(), RequestContext(request))然后 向它写入一个 cookie resp.set_cookie("order_no", order_no)。您使用 request.COOKIES['order_no'] 检索它

还有其他奇怪的地方可以存储值:文件、缓存、其他数据存储格式等。完全不推荐。

【讨论】:

  • @Jordan- 使用 Sessions 是最好的方法。一些很好的信息,谢谢。
【解决方案2】:

没有。编写一个返回您感兴趣的值的函数,并从两个视图中调用它。

【讨论】:

    【解决方案3】:

    楼上说的没错。您不应尝试将变量“共享”到不同的视图。

    但是,如果您必须或有理由这样做,您可以将其存储在会话中,然后您可以在任何有权访问“请求”的视图中访问它。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 2019-03-24
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2019-05-23
      • 2015-10-20
      相关资源
      最近更新 更多