- Django 基础概念
- Django - 首页
- Django - 基础知识
- Django - 概述
- Django - 环境配置
- Django - 创建项目
- Django - 应用生命周期
- Django - 创建视图
- Django - URL 路由
- Django - 首页
- Django - 模板系统
- Django - MVT
- Django - 添加主模板
- Django 管理后台
- Django 管理后台 - 界面
- Django 管理后台 - 创建用户
- Django 管理后台 - 添加模型
- Django 管理后台 - 设置显示字段
- Django 管理后台 - 更新对象
- Django 模型
- Django - 模型
- Django - 插入数据
- Django - 更新数据
- Django - 删除数据
- Django - 更新模型
- Django 静态文件
- Django - 添加静态文件
- Django - 添加 CSS 文件
- Django 进阶
- Django - 404 页面未找到
- Django - 页面重定向
- Django - 发送邮件
- Django - 通用视图
- Django - 表单处理
- Django - 文件上传
- Django - Apache 配置
- Django - Cookie 处理
- Django - Session
- Django - 缓存
- Django - 评论
- Django - RSS
- Django - AJAX
- Django 有用资源
- Django - 快速指南
- Django - 有用资源
- Django - 讨论
Django - 通用视图
在某些情况下,像我们之前看到的那样编写视图非常繁琐。想象一下,你需要一个静态页面或一个列表页面。Django 提供了一种简单的方法来设置这些简单的视图,称为通用视图。
与经典视图不同,通用视图是类而不是函数。Django 在 `django.views.generic` 中提供了一组通用视图类,每个通用视图都是这些类之一或继承自这些类之一的类。
有 10 多个通用类 -
>>> 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', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates', 'detail', 'edit', 'list']
你可以将这些用于你的通用视图。让我们看一些例子来了解它的工作原理。
静态页面
让我们从“static.html”模板发布一个静态页面。
我们的 static.html -
<html> <body> This is a static page!!! </body> </html>
如果我们以前学习的方式去做,我们需要将 `myapp/views.py` 更改为 -
from django.shortcuts import render def static(request): return render(request, 'static.html', {})
以及 `myapp/urls.py` 更改为 -
from django.conf.urls import patterns, url urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)
最好的方法是使用通用视图。为此,我们的 `myapp/views.py` 将变为 -
from django.views.generic import TemplateView class StaticView(TemplateView): template_name = "static.html"
我们的 `myapp/urls.py` 将变为 -
from myapp.views import StaticView from django.conf.urls import patterns urlpatterns = patterns("myapp.views", (r'^static/$', StaticView.as_view()),)
访问 /myapp/static 你将得到 -
为了得到相同的结果,我们也可以这样做 -
- views.py 不变
- 将 url.py 文件更改为 -
from django.views.generic import TemplateView from django.conf.urls import patterns, url urlpatterns = patterns("myapp.views", url(r'^static/',TemplateView.as_view(template_name = 'static.html')),)
正如你所看到的,在第二种方法中,你只需要更改 url.py 文件。
列出并显示数据库中的数据
我们将列出 Dreamreal 模型中的所有条目。使用 ListView 通用视图类可以轻松实现这一点。编辑 url.py 文件并将其更新为 -
from django.views.generic import ListView from django.conf.urls import patterns, url urlpatterns = patterns( "myapp.views", url(r'^dreamreals/', ListView.as_view(model = Dreamreal, template_name = "dreamreal_list.html")), )
需要在此处注意的是,通用视图传递给模板的变量是 `object_list`。如果你想自己命名它,你需要向 `as_view` 方法添加一个 `context_object_name` 参数。然后 url.py 将变为 -
from django.views.generic import ListView from django.conf.urls import patterns, url urlpatterns = patterns("myapp.views", url(r'^dreamreals/', ListView.as_view( template_name = "dreamreal_list.html")), model = Dreamreal, context_object_name = ”dreamreals_objects” ,)
相关的模板将是 -
{% extends "main_template.html" %} {% block content %} Dreamreals:<p> {% for dr in object_list %} {{dr.name}}</p> {% endfor %} {% endblock %}
访问 /myapp/dreamreals/ 将生成以下页面 -
广告