Spec-Zone.ru › Django 1.8

Кратные функции 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() различными способами.

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

    from django.shortcuts import redirect
    
    def my_view(request):
        ...
        object = MyModel.objects.get(...)
        return redirect(object)
    
  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('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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API