我在视图中有一个名为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))
答案 0 :(得分:6)
只是添加,因为没有人说过这个,而你似乎还不明白这一点:
您的client_items
视图必须以某种方式访问order_no
变量。如果由于某种原因,该值未通过URL传递,则必须从somehwere获取值。只有三个真实位置可以获得此值:
order_no = Order.objects.filter(cart__user=request.user).order_no
之类的操作,这样可以获得与用户当前购物车相关联的订单,然后返回order_no
值。order_no
的值,此时您将使用request.session['order_no']=order_no
保存它。稍后,当您想要检索该值时,您只需在视图中使用order_no=request.session['order_no']
。resp = render_to_response(template_name, locals(), RequestContext(request))
和然后向它写resp.set_cookie("order_no", order_no)
。你可以使用{{{ 1}} 还有其他可以存储价值的奇怪地方:文件,缓存,其他数据存储格式等。完全不推荐。
答案 1 :(得分:4)
没有。编写一个返回您感兴趣的值的函数,并从两个视图中调用它。
答案 2 :(得分:0)
上面说的那个人是对的。您不应尝试将变量“共享”到不同的视图。
但是,如果您必须或有理由然后将其存储在会话中,那么您可以在任何有权访问“请求”的视图中访问它。
希望有所帮助。