django.shorcuts模块中,Django为我们提供了多个方便快捷的方法。

render

render(request, template_name, context=None, content_type=None, status=None, using=None)
将给定的模板与上下文字典组合在一起,并渲染成文本返回一个HttpRespone对象。

必填参数

  • request:用于生成相应的请求对象。
  • template_name:要使用的模板的全名或者模板的列表。如果给定一个列表,将使用存在的第一个模板。

    可选参数

  • context:需要添加的上下文字典。默认为空字典,可以以字典键值对的形式填写提供模板模板页面需要使用到的数据,对应的模板页面使用双花括号包裹上下文字典中的键名即可使用(例如,{{ context_key_name }})。同样也可以使用python的内置方法loacls()将函数作用域内所有的变量一次性添加,但一般不建议这样使用。
  • content_type:用于生成文档的MIME类型。默认为DEFAULT_CONTENT_TYPE设置的值。
  • status:响应的状态码,默认为:200。
  • using:用于加载模板的模板引擎的”NAME”。

redirect()

redirect(to, permanent=Fale, args, **kwargs)
根据传递进来的url参数,返回HttpRequestRedirect。默认情况为临时重定向,如果需要永久重定向需要设置为permanent = True
参数to的传值选项:

  • 模型:将调用模型的get_absolute_url()函数反向解析出的url。
  • 视图名称:将使用urlpatterns中path()的name,可能会带有参数,需要使用reverse()反向解析。
  • 绝对路径或相对路径的URL:将原封不动的作为重定向的目标地位置。
    示例:
  1. 使用模型
    ```python
    from django.shorcuts import redirect

def my_views(request):
obj = MyModel.objects.get(…)
return redirect(obj) # 将调用模型对象的get_absoulte_url()方法

2.使用视图名
```python
#  xxx/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path("some_view/", views.some_view, name="some_view_name"),
]

# xxx/views.py
def my_view(request):
    return redirect("some_view_name")

3.使用相对路径或绝对路径

# 相对路径
def my_view(request):
    return redirect("/some/url/")


# 绝对路径
def my_view(request):
    return redirect("https://www.baidu.com")

4.设置为永久重定向

def my_view(request):
    obj = MyModel.objects.get(...)
    return redirect(obj, permanent=True)

get_object_or_404()

get_object_or_404(klass, *args, **kwargs)
这是一个非常常用的方法,用于查询某个对象,如果没有找到将会直接返回404页面。
实质上,是调用了模型管理器get()方法,返回一个对象,但是如果对象未找到的话,将不会抛出DoesNotExists异常,而是引发Http404异常,返回一个404页面。

必填参数

  • klass:获取对象Model的类名或QuerySet等。
  • **kwargs:查询参数,应采用get()可接受的格式。

示例:

  • 传递Model类
from django.contrib.auth.models import User
from django.shotcuts import get_object_or_404
from django.http import Http404

# 下面两个示例的效果是等效的。
def my_view(request):
    obj = get_object_or_404(User, pk=1)


def my_view1(request):
    try:
        obj = User.objects.get(pk=1)
    except User.DoesNotExists:
        raise Http404
  • 传递QuerySet
from django.contrib.auth.models import User
from django.shotcuts import get_object_or_404

qs = User.objects.filter(username_startswith="a")
get_object_or_404(qs, pk=1)

get_list_or_404

get_list_or_404(klass, args, **kwargs)
相当于get_object_or_404的获取多个值的版本。
实质上,将会返回通过指定模型的filter()的结果,并将结果映射为要一个列表,若果列表为将抛出Http404异常。

必填参数

  • klass:获取对象Model的类名或QuerySet等。
  • **kwargs:查询参数,应采用filter()可接受的格式。

示例:

from django.contrib.auth.models import User
from django.shotcuts import get_list_or_404
from django.http import Http404

# 下面两个示例的效果是等效的。
def my_view(request):
    objs = get_list_or_404(User, is_active=1)


def my_view1(request):
    try:
        objs = list(User.objects.filter(is_active=1))
    if not objes:
        raise Http404
0条评论

相关推荐

django教程

r

Django 2019-05-20 10:53:53

Celery

celery学习资料

Django 2019-05-25 18:41:55

Django-rest-framework教程

django-rest-framework教程。

Django 2019-07-18 16:33:26

django实用资料

django项目从0到1自己总结的实用的资料,大部分常用的功能这里都有

Django 2019-05-08 18:21:34