Функции быстрого доступа Django ¶
Пакет django.shortcuts
объединяет функции и служебные классы, которые охватывают несколько уровней архитектуры MVC. Другими словами, эти функции / классы для удобства вводят управляемую связь.
render()
¶
-
render
( запрос , имя_шаблона , контекст = None , content_type = None , status = None , using = None ) ¶ Объединяет заданный шаблон с заданным контекстным словарем и возвращает объект
HttpResponse
с результирующим текстом.Django не предоставляет функцию быстрого доступа, которая возвращает ответ,
TemplateResponse
потому что конструкторTemplateResponse
имеет тот же уровень гибкости, что иrender()
.
Обязательные параметры ¶
request
- Объект запроса, используемый для генерации ответа.
template_name
- Полное имя используемого шаблона или список имен шаблонов. Если список указан, будет использован первый шаблон из найденного списка. См. Документацию по загрузке шаблонов для получения дополнительной информации о поиске шаблонов.
Необязательные параметры ¶
context
- Словарь значений для добавления контекста шаблона. По умолчанию этот словарь пуст. Если одно из значений словаря является исполняемым, представление вызовет его непосредственно перед отрисовкой шаблона.
content_type
- Тип MIME, используемый для создаваемого документа. По умолчанию это
'text/html'
. status
- Код состояния ответа. По умолчанию это
200
. using
- Имя
NAME
шаблонизатора, используемого для загрузки шаблона.
Пример ¶
В следующем примере отображается шаблон 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')
redirect()
¶
-
redirect
( to , * args , постоянный = False , ** kwargs ) ¶ Возвращает ответ
HttpResponseRedirect
на URL-адрес, соответствующий переданным параметрам.Параметры могут быть:
- Модель:
get_absolute_url()
будет вызвана функция модели . - Имя представления и, возможно, параметры:
reverse()
будут использоваться для разрешения имени. - Абсолютный или относительный URL-адрес, который будет использоваться как место перенаправления.
По умолчанию производит временное перенаправление; укажите,
permanent=True
чтобы произвести постоянное перенаправление.- Модель:
Примеры ¶
Функцию redirect()
можно использовать по-разному.
Передав ему объект;
get_absolute_url()
вызывается метод объекта для создания URL-адреса перенаправления:from django.shortcuts import redirect def my_view(request): ... obj = MyModel.objects.get(...) return redirect(obj)
Передав ему имя представления и, необязательно, позиционные или именованные параметры; 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('https://example.com/')
По умолчанию redirect()
возвращает временное перенаправление. Все вышеперечисленные формы принимают параметр, permanent
который, если установлен в значение True
, производит постоянное перенаправление:
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj, permanent=True)
get_object_or_404()
¶
-
get_object_or_404
( klass , * args , ** kwargs ) ¶ Вызывает
get()
обработчик данной модели, но выдает исключениеHttp404
вместо исключенияDoesNotExist
модели.
Обязательные параметры ¶
Пример ¶
В следующем примере получается объект MyModel с первичным ключом 1:
from django.shortcuts import get_object_or_404
def my_view(request):
obj = get_object_or_404(MyModel, pk=1)
Этот пример эквивалентен:
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.")
Самый распространенный случай - передать 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')
Также можно использовать :gestionnaires de liaison
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 ) ¶ Возвращает результат
filter()
преобразования обработчика данной модели в список, показывая, являетсяHttp404
ли полученный список пустым.
Обязательные параметры ¶
Пример ¶
В следующем примере извлекаются все опубликованные объекты из
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.")