code

다른보기 내에서보기를 호출 할 수 있습니까?

codestyles 2020. 11. 24. 08:01
반응형

다른보기 내에서보기를 호출 할 수 있습니까?


내보기 중 하나는 다른 기능과 함께 항목을 추가해야하지만 항목을 구체적으로 추가하는 다른보기가 이미 있습니다.

다음과 같이 할 수 있습니까?

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

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

보기 함수는 렌더링 된 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)
    ...

물론 모든 것이 말하고 완료되면 뷰가 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")

더 좋은 방법은 템플릿 시스템을 사용하는 것입니다. @Seth와 @brady의 아이디어 결합 :

def specific_add_item_view(request, extra_context_stuff=None):
    Item.objects.create()
    context_variables = {} # obviously want to populate this
    if extra_context_stuff:
        context_variables.update(extra_context_stuff)
    return render(request, 'app_name/view1_template.html', context_variables)

def bigger_view(request):
    extra_context_stuff = {'big_view': True}
    return specific_add_item_view(request, extra_context_stuff)

And your app_name/view1_template.html might contain a conditional template tag

{% if big_view %}
<p>Extra html for the bigger view</p>
{% endif %}

참고URL : https://stackoverflow.com/questions/4808329/can-i-call-a-view-from-within-another-view

반응형