Django想要使用另一个视图中的变量

时间:2011-02-09 16:22:30

标签: django templates variables views

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

编辑:这是我最新的观点。我尝试创建另一个名为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))

3 个答案:

答案 0 :(得分:6)

只是添加,因为没有人说过这个,而你似乎还不明白这一点:

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

  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))然后向它写resp.set_cookie("order_no", order_no)。你可以使用{{{ 1}}
  4. 还有其他可以存储价值的奇怪地方:文件,缓存,其他数据存储格式等。完全不推荐。

答案 1 :(得分:4)

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

答案 2 :(得分:0)

上面说的那个人是对的。您不应尝试将变量“共享”到不同的视图。

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

希望有所帮助。