Django:将请求直接(内联)传递给第二个视图
Posted
技术标签:
【中文标题】Django:将请求直接(内联)传递给第二个视图【英文标题】:Django: Passing a request directly (inline) to a second view 【发布时间】:2009-12-12 13:39:17 【问题描述】:我正在尝试直接从另一个视图调用视图(如果可能的话)。我有一个看法:
def product_add(request, order_id=None):
# Works. Handles a normal POST check and form submission and redirects
# to another page if the form is properly validated.
然后我有第二个视图,它在数据库中查询产品数据并应该调用第一个视图。
def product_copy_from_history(request, order_id=None, product_id=None):
product = Product.objects.get(owner=request.user, pk=product_id)
# I need to somehow setup a form with the product data so that the first
# view thinks it gets a post request.
2nd_response = product_add(request, order_id)
return 2nd_response
由于第二个需要像第一个视图一样添加产品,所以我想知道是否可以从第二个视图调用第一个视图。
我的目标只是将请求对象传递到第二个视图,并将获得的响应对象依次返回给客户端。
非常感谢任何帮助,如果这是一种不好的方法,也可以批评。但随后有一些指针.. 避免 DRY-ing。
谢谢!
杰拉德。
【问题讨论】:
应该没问题。有用吗? 【参考方案1】:天哪,我在想什么。这当然是最干净的解决方案:
def product_add_from_history(request, order_id=None, product_id=None):
""" Add existing product to current order
"""
order = get_object_or_404(Order, pk=order_id, owner=request.user)
product = Product.objects.get(owner=request.user, pk=product_id)
newproduct = Product(
owner=request.user,
order = order,
name = product.name,
amount = product.amount,
unit_price = product.unit_price,
)
newproduct.save()
return HttpResponseRedirect(reverse('order-detail', args=[order_id]) )
【讨论】:
【参考方案2】:视图是一种常规的 python 方法,您当然可以从另一个调用一个视图,给您传递正确的参数并正确处理结果(如 404...)。现在,如果这是一个好习惯,我不知道。我会自己使用一个实用方法并从两个视图中调用它。
【讨论】:
实用方法是指编写一个单独的辅助函数?【参考方案3】:如果您对通过 HTTP 调用 API 的开销感到满意,您可以使用 urllib
到 post
向您的 product_add
请求处理程序发出请求。
据我所知,如果您使用 django 附带的开发服务器进行开发,这可能会增加一些麻烦,因为它一次只能处理一个请求并且会无限期阻塞(请参阅trac、google groups)。
【讨论】:
以上是关于Django:将请求直接(内联)传递给第二个视图的主要内容,如果未能解决你的问题,请参考以下文章
如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭