Пакет django.shortcuts содержит вспомогательные функции и классы “влияющие” на несколько уровней MVC. Другими словами, эти функции упрощают разработку и код.
Выполняет указанный шаблон с переданным словарем контекста и возвращает HttpResponse с полученным содержимым.
Функция render() аналогична вызову функции render_to_response() с аргументом context_instance, который указывает использовать RequestContext.
Следующий пример выполняет шаблон 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))
Следующий пример выполняет шаблон 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 указанный через ургументы.
В аргументах можно передать:
По-умолчанию использует временное перенаправление, используйте аргумент 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
Aug 21, 2013