장고 shortcut function 들을 정리해보았습니다. 어떤 short_cut이 있는지만 파악하고 자세한 내용은 공식문서를 참조하면 좋을 것 같습니다.

장고 shortcut function

render()

render(request, template_name, context=None, content_type=None, status=None, using=None)

Required arguments

request

template_name

Optional arguments

context

content_type

status

using

예제 코드

from django.shortcuts import render


def my_view(request):
    # View code here...
    return render(
        request,
        "myapp/index.html",
        {
            "foo": "bar",
        },
        content_type="application/xhtml+xml",
    )

redirect()

redirect(to, *args, permanent=False, **kwargs)

다양한 방식으로 사용될 수 있습니다.

1. 뷰 이름을 인자로 입력하여 특정 뷰로 이동시킵니다. 키워드 인자를 전달합니다. URL은 reverse() 메소드를 사용하여 역방향으로 해석됩니다.

def my_view(request):
    ...
    return redirect("some-view-name", foo="bar")

2. 어떤 객체를 전달함으로써; 해당 객체의 get_absolute_url() 메서드가 호출되어 리디렉션 URL을 알아냅니다.

from django.shortcuts import redirect


def my_view(request):
    ...
    obj = MyModel.objects.get(...)
    return redirect(obj)

3. 하드코딩된 URL을 전달하여 다음으로 리디렉션

def my_view(request):
    ...
    return redirect("/some/url/")

get_object_or_404()

get_object_or_404(klass, *args, **kwargs)

인자로 입력 받은 모델 매지저에서 get()을 호출하지만 데이터가 없을 시, 모델의 DoesNotExist 예외 대신 Http404가 발생합니다.

Argument

klass

*args

**kwargs

기본적인 사용법

from django.shortcuts import get_object_or_404


def my_view(request):
    obj = get_object_or_404(MyModel, pk=1)

아래 코드는 get_object_or_404() 사용한 위의 코드와 동일한 동작을 하는 코드입니다.

from django.http import Http404


def my_view(request):
    try:
        obj = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")

get_object_or_404() 없이 매니저를 사용하여 get한 경우

def article_details(request, id):
    articles = Articles.objects.get(id=id)
    context = {"articles": articles}
    return render(request, "article_details.html", context)

모델에 없는 데이터로 URL 요청 시 결과

get_object_or_404 사용

from django.shortcuts import get_object_or_404, render, redirect

def article_details(request, id):
    articles = get_object_or_404(Articles, pk=id)
    context = {"articles": articles}
    return render(request, "article_details.html", context)

사용자가 직관적으로 무엇이 에러인지 알 수 있게 됩니다.

모델에 없는 데이터를 URL로 요청 시, 404로 변경함

get_list_or_404()

get_list_or_404(klass, *args, **kwargs)

Arguments

klass

*args


**kwargs

예제

from django.shortcuts import get_list_or_404


def my_view(request):
    my_objects = get_list_or_404(MyModel, published=True)

아래 코드는 위의 코드와 동일하게 동작합니다.

from django.http import Http404


def my_view(request):
    my_objects = list(MyModel.objects.filter(published=True))
    if not my_objects:
        raise Http404("No MyModel matches the given query.")

참고하면 좋은 글

공식 문서 : https://docs.djangoproject.com/en/4.2/topics/http/shortcuts/#module-django.shortcuts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


목차