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 的开销感到满意,您可以使用 urllibpost 向您的 product_add 请求处理程序发出请求。

据我所知,如果您使用 django 附带的开发服务器进行开发,这可能会增加一些麻烦,因为它一次只能处理一个请求并且会无限期阻塞(请参阅trac、google groups)。

【讨论】:

以上是关于Django:将请求直接(内联)传递给第二个视图的主要内容,如果未能解决你的问题,请参考以下文章

无法快速显示第一个视图控制器将值传递给第二个视图控制器

如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭

Swift 3:如何动态加载图像并将变量传递给第二个视图控制器?

如何将值传递给第二个控制器

无法将 swift 文件分配给第二个视图

如何将一个查询的结果传递给第二个查询并将结果显示在一个表中?