Функции быстрого доступа 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() можно использовать по-разному.

  1. Передав ему объект; get_absolute_url() вызывается метод объекта для создания URL-адреса перенаправления:

    from django.shortcuts import redirect
    
    def my_view(request):
        ...
        obj = MyModel.objects.get(...)
        return redirect(obj)
    
  2. Передав ему имя представления и, необязательно, позиционные или именованные параметры; URL-адрес будет разрешен с использованием метода reverse() :

    def my_view(request):
        ...
        return redirect('some-view-name', foo='bar')
    
  3. Передав ему фиксированный 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 модели.

Обязательные параметры

klass
Класс Model , один Manager или экземпляр QuerySet в качестве источника объекта.
**kwargs
Параметры поиска в формате, принятом get() и filter() .

Пример

В следующем примере получается объект 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 ли полученный список пустым.

Обязательные параметры

klass
Экземпляр Model , Manager или в QuerySet качестве источника списка объектов.
**kwargs
Параметры поиска в формате, принятом get() и 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.")

Copyright ©2021 All rights reserved