Модуль ярлыков Django shortcuts – вспомогательные функции
KODМодуль ярлыков Django представляет собой набор вспомогательных функций, которые обычно используются в функциях и классах представления в Python. В модуле django.shortcuts доступно множество ярлыков. Другими словами, эти функции/классы вводят управляемую связь для удобства.
render()
Функция render() объединяет данный шаблон со словарем и возвращает объект HttpResponse с отображаемым текстом. Ниже приведен синтаксис функции render().
Синтаксис –
render(request, template_name, context=None, content_type=None, status=None, using=None)
Параметры:
request — используется для генерации ответа.
template_name — принимает имена шаблонов и отображает их содержимое.
Дополнительные параметры:
context — представляет словарь значений для добавления в контекст шаблона.
content_type — тип MIME для результирующего документа. По умолчанию «text/html».
status — показывает код состояния ответа. По умолчанию 200.
using — имя механизма шаблонов, используемого для загрузки шаблона.
В следующем примере мы отображаем шаблон newapp/index.html.
from django.shortcuts import render
def new_view(request):
# View code here...
return render(request, 'newapp/index.html', {
'foo': 'bar',
}, content_type='application/xhtml+xml')
Это эквивалентно приведенному ниже коду.
def new_view(request):
# View code here...
t = loader.get_template('newapp/index.html')
c = {'foo': 'bar'}
return HttpResponse(t.render(c, request), content_type='application/xhtml+xml')
redirect()
Функция redirect() используется для перенаправления на определенный URL-адрес. Она возвращает HttpResponseRedirect на соответствующий URL-адрес для переданного аргумента.
Давайте посмотрим на синтаксис:
redirect(to, *args, permanent=False, **kwargs)
Параметры:
model: будет вызвана функция get_absolute_url() модели.
Имя представления с аргументами: urls.reverse() будет использоваться для обратного разрешения имени.
URL-адрес будет использоваться как есть для места перенаправления.
Пример –
def blog_view(request, post_id):
blog = Post.objects.get(pk=post_id)
return redirect(blog)
# equivalent to: return HttpResponseRedirect(blog.get_absolute_url())
def blog_view(request, post_id):
return redirect('blog_details', id=post_id)
# equivalent to: return HttpResponseRedirect(reverse('blog_details', args=(post_id, )))
def relative_url_view(request):
return redirect('/blogs/archive/')
# equivalent to: return HttpResponseRedirect('/blogs/archive/')
По умолчанию redirect() возвращает временное перенаправление. Однако мы можем вернуть постоянное перенаправление, если установлено значение True.
def my_view(request):
obj = MyModel.objects.get(...)
return redirect(obj, permanent=True)
get_object_or_404()
Возвращает исключение DoesNotExist, если искомый объект не найден. С другой стороны, метод get() вызывает Http404.
Параметры:
Klass — класс модели, менеджер или экземпляр QuerySet, из которого можно получить объект.
**kwargs — параметры поиска, которые должны быть в формате, принятом get() и filter().
Давайте разберемся в приведенном ниже примере.
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.")
get_list_or_404()
Возвращает результаты filter() для заданного приведения менеджера моделей к списку, поднимая Http404, если результирующий список пуст. Синтаксис такой же, как у get_object_or_404.
Параметры:
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.")
Мы обсудили несколько важных сочетаний клавиш, обеспечивающих контроль над объектами. Эти ярлыки также позволяют эффективно обрабатывать потенциальные ошибки.