2011-02-09 25 views
0

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

编辑:这是我最新的观点。我曾尝试创建另一个名为items_in_edit_order的视图。在这一点上,我得到了`order_no没有定义。

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)) 
+0

可能重复的[想从另一个视图打印出项目列表django](http://stackoverflow.com/问题/ 4935019 /想要打印出来的项目从另一个视图django) – 2011-02-09 16:33:05

回答

6

只是增加,因为没有人说这一点,好像你不明白这一点尚未:

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']

还有其他的,离奇的,地方你可能存储的值:文件,缓存,其他数据存储格式等。完全不推荐。

+0

@约旦 - 使用会议它是最好的方式来做到这一点,一些好的信息,谢谢。 – Shehzad009 2011-02-10 15:28:44

4

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

0

这家伙以上说的是正确的。你不应该试图将变量“分享”给不同的观点。

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

希望有所帮助。

相关问题