반응형
다른보기 내에서보기를 호출 할 수 있습니까?
내보기 중 하나는 다른 기능과 함께 항목을 추가해야하지만 항목을 구체적으로 추가하는 다른보기가 이미 있습니다.
다음과 같이 할 수 있습니까?
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
반응형
'code' 카테고리의 다른 글
C와 Python-모듈로 (%) 연산의 다른 동작 (0) | 2020.11.24 |
---|---|
내부 블록 수준 요소 중첩 (0) | 2020.11.24 |
Windows 배치 파일 : 그렇지 않은 경우 (0) | 2020.11.24 |
작업 및 프로세스 ID를 인쇄하지 않고 백그라운드에서 bash 명령 실행 (0) | 2020.11.24 |
지정된 형식 멤버는 LINQ to Entities에서 지원되지 않습니다. (0) | 2020.11.24 |