Кратные функции Django
Пакет django.shortcuts содержит вспомогательные функции и классы, которые «охватывают» несколько уровней MVC. Другими словами, эти функции/классы вводят управляемое связывание для удобства.
render
-
render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None, current_app=_current_app_undefined, dirs=_dirs_undefined, using=None)[source] -
Комбинирует заданную шаблонную структуру с заданным словарем контекста и возвращает объект
HttpResponseс отрендеренным текстом.render()эквивалентно вызовуrender_to_response()с аргументомcontext_instance, который заставляет использоватьRequestContext.Django не предоставляет функцию-ярлык, которая возвращает
TemplateResponse, так как конструкторTemplateResponseпредлагает тот же уровень удобства, что иrender().
Необходимые аргументы
-
request - Объект запроса, используемый для генерации этого ответа.
-
template_name - Полное имя используемого шаблона или последовательность имён шаблонов.
Дополнительные аргументы
-
context -
Словарь значений для добавления в контекст шаблона. По умолчанию это пустой словарь. Если значение в словаре является вызываемым, представление вызовет его перед рендерингом шаблона.
Аргумент
contextраньше называлсяdictionary. Это имя устарело в Django 1.8 и будет удалено в Django 1.10. -
context_instance -
Экземпляр контекста для рендеринга шаблона. По умолчанию шаблон будет рендериться с экземпляром
RequestContext(заполненным значениями изrequestиcontext).Устарело начиная с версии 1.8: Аргумент
context_instanceустарел. Используйте простоcontext. -
content_type - Тип MIME для результирующего документа. По умолчанию соответствует значению настройки
DEFAULT_CONTENT_TYPE. -
status - Код состояния ответа. По умолчанию
200. -
current_app -
Подсказка, указывающая, какой приложение содержит текущее представление. Подробнее об этом читайте в стратегии разрешения имён URL.
Устарело начиная с версии 1.8: Аргумент
current_appустарел. Вместо этого вы должны установитьrequest.current_app. -
using - Имя
NAMEдвижка шаблонов для загрузки шаблона.
Параметр using был добавлен.
Параметр dirs был добавлен.
Устарело начиная с версии 1.8: Параметр dirs был устарел.
Пример
Следующий пример рендерит шаблон 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 loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/index.html')
c = {'foo': 'bar'}
return HttpResponse(t.render(c, request),
content_type="application/xhtml+xml")
render_to_response
-
render_to_response(template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None, dirs=_dirs_undefined, using=None)[source] -
Рендерит заданного шаблона со словарем контекста и возвращает объект
HttpResponseс отрендеренным текстом.
Необходимые аргументы
-
template_name - Полное имя используемого шаблона или последовательность имён шаблонов. Если передана последовательность, будет использован первый существующий шаблон. Подробнее о том, как находятся шаблоны, читайте в документации по загрузке шаблонов.
Дополнительные аргументы
-
context -
Словарь значений для добавления в контекст шаблона. По умолчанию это пустой словарь. Если значение в словаре является вызываемым, представление вызовет его перед рендерингом шаблона.
Аргумент
contextраньше называлсяdictionary. Это имя устарело в Django 1.8 и будет удалено в Django 1.10. -
context_instance -
Экземпляр контекста для рендеринга шаблона. По умолчанию шаблон будет рендериться с экземпляром
Context(заполненным значениями изcontext). Если вам нужно использовать обработчики контекста, рендерите шаблон с экземпляромRequestContextвместо этого. Ваш код может выглядеть примерно так:return render_to_response('my_template.html', my_context, context_instance=RequestContext(request))Устарело начиная с версии 1.8: Аргумент
context_instanceустарел. Используйте функциюrender()вместо неё, которая всегда делаетRequestContextдоступным. -
content_type - Тип MIME для результирующего документа. По умолчанию соответствует значению настройки
DEFAULT_CONTENT_TYPE. -
status - Код состояния ответа. По умолчанию
200. -
using - Имя
NAMEдвижка шаблонов для загрузки шаблона.
Параметры status и using были добавлены.
Параметр dirs был добавлен.
Устарело начиная с версии 1.8: Параметр dirs был устарел.
Пример
Следующий пример рендерит шаблон 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"},
content_type="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/index.html')
c = Context({'foo': 'bar'})
return HttpResponse(t.render(c),
content_type="application/xhtml+xml")
redirect
-
redirect(to, permanent=False, *args, **kwargs)[source] -
Возвращает
HttpResponseRedirectпо соответствующему URL для переданных аргументов.Аргументы могут быть:
- Модель: будет вызвана функция
get_absolute_url()модели. - Имя представления, возможно с аргументами: будет использована
urlresolvers.reverseдля обратного разрешения имени. - Абсолютный или относительный URL, который будет использован как есть для перенаправления.
По умолчанию выполняется временное перенаправление; передайте
permanent=Trueдля выполнения постоянного перенаправления.Добавлена возможность использования относительных URL.
- Модель: будет вызвана функция
Примеры
Вы можете использовать функцию redirect() различными способами.
-
Передав некоторый объект; будет вызвана его метод
get_absolute_url()для определения URL перенаправления:from django.shortcuts import redirect 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_object_or_404
-
get_object_or_404(klass, *args, **kwargs)[source] -
Вызывает
get()для заданного менеджера модели, но вместо исключенияDoesNotExistмодели генерируетHttp404.
Обязательные аргументы
-
klass - Класс
Model, менеджерManagerили экземплярQuerySetдля получения объекта. -
**kwargs - Параметры поиска, которые должны быть в формате, принимаемом
get()иfilter().
Пример
Следующий пример получает объект с первичным ключом 1 из MyModel:
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.")
Наиболее распространённый случай — передача класса Model, как показано выше. Однако вы также можете передать экземпляр QuerySet:
queryset = Book.objects.filter(title__startswith='M') get_object_or_404(queryset, pk=1)
Приведённый выше пример немного искусственный, поскольку эквивалентен:
get_object_or_404(Book, title__startswith='M', pk=1)
но может быть полезен, если вам передаётся переменная queryset из другого места.
Наконец, вы также можете использовать менеджер Manager. Это полезно, например, если у вас есть пользовательский менеджер:
get_object_or_404(Book.dahl_objects, title='Matilda')
Вы также можете использовать related managers:
author = Author.objects.get(name='Roald Dahl') get_object_or_404(author.book_set, title='Matilda')
Примечание: как и в случае с get(), если найдено более одного объекта, будет возбуждено исключение MultipleObjectsReturned.
get_list_or_404
-
get_list_or_404(klass, *args, **kwargs)[source] -
Возвращает результат применения
filter()к заданному менеджеру модели в виде списка, генерируяHttp404, если полученный список пуст.
Обязательные аргументы
-
klass - Экземпляр
Model,ManagerилиQuerySetдля получения списка. -
**kwargs - Параметры поиска, которые должны быть в формате, принимаемом
get()иfilter().
Пример
Следующий пример получает все опубликованные объекты из 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("No MyModel matches the given query.")
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/