Django 快捷方式
Django快捷方式模块是一组通常用于视图函数/类中的辅助函数。模块 django.shortcuts 提供了许多快捷方式。换句话说,这些函数/类为方便起见引入了受控耦合。
render()
它将给定的模板与字典组合,返回具有渲染文本的 HttpResponse 对象。以下是 渲染() 函数的语法。
语法 –
render(request, template_name, context=None, content_type=None, status=None, using=None)
参数 –
下面是render()函数的参数。
- 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)
参数 –
- A model: 将调用模型的get_absolute_url()函数。
- A view name with arguments: 将使用urls.reverse()来解析名称。
- A URL will be used as-is for the redirect location. 将直接使用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 – 从中获取列表的模型、管理器或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.")
我们已经讨论了一些重要的快捷方式,这些快捷方式提供对对象的控制。这些快捷方式还可以有效处理潜在的错误。