Пакет django.shortcuts содержит вспомогательные функции и классы “влияющие” на несколько уровней MVC. Другими словами, эти функции упрощают разработку и код.
Выполняет указанный шаблон с переданным словарем контекста и возвращает HttpResponse с полученным содержимым.
Функция render() аналогична вызову функции render_to_response() с аргументом context_instance, который указывает использовать RequestContext.
Объект обрабатываемого запроса
Полное название шаблона, который должен использоваться, или список названий шаблонов. Если передать список, будет использован первый существующий шаблон. Информацию о том, как ищутся шаблоны, смотрите раздел о загрузчике шаблонов.
Словарь переменных для контекста шаблона. По-умолчанию, этот словарь пустой. Если значение ключа словаря это функция, она будет вызвана перед выполнением шаблона.
Экземпляр контекста, который будет использоваться при выполнении шаблона. По-умолчанию это экземпляр RequestContext (со значениями с request и dictionary).
MIME-тип результата. По-умолчанию используется значение настройки DEFAULT_CONTENT_TYPE.
Код HTTP статуса ответа. По-умолчанию 200.
Указывает приложение, которое содержит данное представление. Подробности смотрите раздел про пространства имен в URL.
Следующий пример выполняет шаблон myapp/index.html и возвращает ответ с MIME-типом application/xhtml+xml:
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/template.html')
c = RequestContext(request, {'foo': 'bar'})
return HttpResponse(t.render(c),
content_type="application/xhtml+xml")
Выполняет указанный шаблон с переданным словарем контекста и возвращает HttpResponse с полученным содержимым.
Полное название шаблона, который должен использоваться, или список названий шаблонов. Если передать список, будет использован первый существующий шаблон. Информацию о том, как ищутся шаблоны, смотрите раздел о загрузчике шаблонов.
Словарь переменных для контекста шаблона. По-умолчанию, этот словарь пустой. Если значение ключа словаря это функция, она будет вызвана перед выполнением шаблона.
Экземпляр контекста, который будет использоваться при выполнении шаблона. По-умолчанию, используется экземпляр Context (со значениями с dictionary). Если вам необходимо использовать процессоры контекста, передайте экземпляр RequestContext. Ваш код может выглядеть таким образом:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
MIME-тип результата. По-умолчанию используется значение настройки DEFAULT_CONTENT_TYPE.
Следующий пример выполняет шаблон myapp/index.html и возвращает ответ с MIME-типом application/xhtml+xml:
from django.shortcuts import render_to_response
def my_view(request):
# View code here...
return render_to_response('myapp/index.html', {"foo": "bar"},
mimetype="application/xhtml+xml")
Этот пример аналогичен:
from django.http import HttpResponse
from django.template import Context, loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/template.html')
c = Context({'foo': 'bar'})
return HttpResponse(t.render(c),
mimetype="application/xhtml+xml")
Возвращает перенаправление(HttpResponseRedirect) на URL указанный через ургументы.
В аргументах можно передать:
Экземпляр модели: как URL будет использоваться результат вызова метода get_absolute_url().
Название представления, возможно с аргументами: для вычисления URL-а будет использоваться функция urlresolvers.reverse().
URL, который будет использован для перенаправления на указанный адрес.
По-умолчанию использует временное перенаправление, используйте аргумент permanent=True для постоянного перенаправления.
Функцию redirect() можно использовать несколькими способами.
Передавая объект; в качестве URL-а для перенаправления будет использоваться результат вызова метода get_absolute_url():
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)
Передавая название представления и необходимые позиционные или именованные аргументы; URL будет вычислен с помощью функции reverse():
def my_view(request):
...
return redirect('some-view-name', foo='bar')
Передавая непосредственно URL:
def my_view(request):
...
return redirect('/some/url/')
Работает так же с полным URL-ом:
def my_view(request):
...
return redirect('http://example.com/')
По-умолчанию, redirect() возвращает временное перенаправление. Все варианты выше принимают аргумент permanent; если передать True будет использоваться постоянное перенаправление:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object, permanent=True)
Вызывает get() для переданного менеджера модели и возвращает полученный объект. Вызывает исключение Http404 вместо DoesNotExist.
Этот пример получает объект модели MyModel с первичным ключом равным 1:
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
Заметим: так как используется метод get(), может быть вызвано исключение MultipleObjectsReturned, если запрос вернет несколько объектов.
Возвращает результат метода filter() для переданного менеджера модели, вызывает Http404 если получен пустой список.
Этот пример получает все опубликованные объекты модели``MyModel``:
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
Mar 30, 2016