24. Механизм представлений в Django.

Вспомогательные функции

render

Рендерит шаблон и создаёт сооветствующий HttpResponse.

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")
-------------------------------------------------------------------------------
from django.http import HttpResponse
from django.template import RequestContext, loader

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

redirect

Позволяет выполнить редирект путём возвращения специального ответа, создает HttpResponseRedirect на соответствующий url.

from django.shortcuts import redirect

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object)
-------------------------------------------------------------------------------
def my_view(request):
    ...
    return redirect('some-view-name', foo='bar')
-------------------------------------------------------------------------------
def my_view(request):
    ...
    return redirect('/some/url/')
-------------------------------------------------------------------------------
def my_view(request):
    ...
    return redirect('http://example.com/')

get_object_or_404

Оборачивает получение объекта из базы (get): если не найдет, то вернёт ответ 404.

from django.shortcuts import get_object_or_404

def my_view(request):
    my_object = get_object_or_404(MyModel, pk=1)
-------------------------------------------------------------------------------
from django.http import Http404

def my_view(request):
    try:
        my_object = MyModel.objects.get(pk=1)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")
-------------------------------------------------------------------------------
queryset = Book.objects.filter(title__startswith='M')
get_object_or_404(queryset, pk=1)

get_list_or_404

Как предыдущий, только для нескольких объектов (filter).

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.")