Функции ярлыков Django

Пакет django.shortcutsсобирает вспомогательные функции и классы, которые «охватывают» несколько уровней MVC. Другими словами, эти функции / классы для удобства вводят управляемую связь.

render()

render( запрос , имя_шаблона , context = None , content_type = None , status = None , using = None )

Объединяет заданный шаблон с заданным контекстным словарем и возвращает HttpResponseобъект с этим визуализированным текстом.

Django не предоставляет функцию быстрого доступа, которая возвращает a, 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().

Пример

В следующем примере объект с первичным ключом 1 получается из MyModel:

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')

Вы также можете использовать :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 )

Возвращает результат 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.")

Copyright ©2021 All rights reserved