教程 > django 教程 > 阅读:42

django 通用视图——迹忆客-ag捕鱼王app官网

在某些情况下,正如我们之前看到的那样,编写视图确实很麻烦。想象一下,您需要一个静态页面或列表页面。django 提供了一种简单的方法来设置这些简单的但是通用的视图,这些视图就被称为通用视图。

与经典视图不同,通用视图是类而不是函数。django 在 django.views.generic 中为通用视图提供了一组类,每个通用视图都是这些类中的一个或从其中一个继承的类。

下面先让我们查看一下 django 为我们提供了哪些通用视图类。

$ python3 manage.py shell

进入编码界面

>>> import django.views.generic
>>> dir(django.views.generic)
['archiveindexview', 'createview', 'datedetailview', 'dayarchiveview', 'deleteview', 'detailview', 'formview', 'genericviewerror', 'listview', 'montharchiveview', 'redirectview', 'templateview', 'todayarchiveview', 'updateview', 'view', 'weekarchiveview', 'yeararchiveview', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'base', 'dates', 'detail', 'edit', 'list']
>>>

看起来,django给我们提供的通用视图类还挺多,下面我们通过一个例子,来看一下通用视图类该如何使用。

静态页面

首先,让我们新建一个模板 static.html,使用这个模板来发布一个静态页面


    
    django 通用视图-迹忆客
这是一个静态页面

如果按照之前学习的方式,接下来我们应该在 app/views.py 视图文件中新建一个 static 视图函数

def static(request):
    return render(request, "static.html")

然后就是在 app/urls.py 路由文件中新建一个路由,如下代码

from django.urls import path, re_path
from . import views
urlpatterns = [
    path('hello/', views.hello),
    path('static/', views.static)
]

然后重启服务,访问结果如下

django 经典视图访问

显然,这不是最好的方式。最好的方法是使用通用视图。下面我们开始对上面的代码进行改造。

首先我们对 app/views.py 视图文件进行改造

from django.views.generic import templateview
class staticview(templateview):
   template_name = "static.html"

然后去修改 app/urls.py 中的路由

from django.urls import path, re_path
from . import views
from .views import staticview
urlpatterns = [
    path('hello/', views.hello),
    path('static/', staticview.as_view())
]

重启服务之后依然可以正常访问到我们的静态页面

django 经典视图访问

还有一种方式就是更加简单,只需要修改 app/urls.py 即可,static 路由如下

from django.urls import path, re_path
from django.views.generic import templateview
from . import views
urlpatterns = [
    path('hello/', views.hello),
    path('static/', templateview.as_view(template_name='static.html'))
]

这样也可以正常访问我们的 static.html 模板提供的静态页面。 这种方式有一个好处就是如果我有另一个静态模板 static2.htm


    
    django 通用视图-迹忆客
这是第二个静态页面

然后我们不再需要在 app/views.py 中添加通用视图类,只需要在 app/urls.py 中添加一条路由即可

from django.urls import path, re_path
from django.views.generic import templateview
from . import views
urlpatterns = [
    path('hello/', views.hello),
    path('static/', templateview.as_view(template_name='static.html')),
        path('static2/', templateview.as_view(template_name='static2.html'))
]

现在我们重启服务,访问 /app/static2 可以正常访问到 static2.html 静态页面

django 通用视图访问

展示数据库数据

下面我们列出 usermodel 模型中的所有数据。这个操作可以通过 listview 通用视图类轻松完成。下面我们更新 app/urls.py 文件

from django.urls import path, re_path
from django.views.generic import templateview, listview
from .models import usermodel
urlpatterns = [
    path('hello/', views.hello),
    path('userlist/', listview.as_view(model=usermodel, template_name="user_list.html"))
]

这里需要注意的是,默认情况下 listview.as_view 传递给模板的变量名称是object_list, 如果想要自己重新命名变量的名称,则需要给as_view传递一个参数context_object_name。代码如下

from django.urls import path, re_path
from django.views.generic import templateview, listview
from .models import usermodel
urlpatterns = [
    path('hello/', views.hello),
    path('userlist/', listview.as_view(model=usermodel, template_name="user_list.html", context_object_name = ”users_objects”))
]

然后编辑我们的 user_list.html 模板

{% extends "main_template.html" %}
{% block title %}django 通用视图 - 迹忆客{% endblock %}
{% block content %}
usermodel 数据:

{% for dr in object_list %} {{dr.name}}

{% endfor %} {% endblock %}

重启服务,访问 /app/userlist 可以正常访问,结果如下

django 通用视图类listview

查看笔记

扫码一下
查看教程更方便
网站地图