一尘不染

可以从另一个视图中调用一个视图吗?

django

我的一个视图需要添加一个项目以及其他功能,但是我已经有另一个视图专门添加了一个项目。

我可以做类似的事情吗?

def specific_add_item_view(request):
    item = Item.objects.create(foo=request.bar)

def big_view(request):
    # ...
    specific_add_item_view(request)

阅读 1171

收藏
2020-03-29

共2个答案

一尘不染

View函数应将呈现的HTML返回给浏览器(在中HttpResponse)。在视图中调用视图意味着(可能)要进行两次渲染。相反,只需将“添加”分解为不是视图的另一个函数,并让两个视图都调用它。

def add_stuff(bar):
    item = Item.objects.create(foo=bar)
    return item

def specific_add_item_view(request):
    item = add_stuff(bar)
    ...

def big_view(request): 
    item = add_stuff(bar)
    ...
2020-03-29
一尘不染

当然,只要说完了,你的视图就会返回HttpResponse对象。以下内容完全有效:

def view1(request):
    # do some stuff here
    return HttpResponse("some html here")

def view2(request):
    return view1(request)

如果你不想从第一个视图返回HttpResponse,则只需将其存储到一些变量中即可忽略:

def view1(request):
    # do some stuff here
    return HttpResponse("some html here")

def view2(request):
    response = view1(request)
    # do some stuff here
    return HttpResponse("some different html here")
2020-03-29