Django通用视图进阶笔记
2017-07-01 00:00
387 查看
常用的通用视图:
ViewListView
TemplateView
DetailView
一.Base Views
1. django.views.generic.base.View
这个类是通用类的基类,其它类都是继承自这个类,一般不会用到这个类,个人感觉用函数更简单些。# views.py from django.http import HttpResponse from django.views.generic import View class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse('Hello, World!') # urls.py from django.conf.urls import patterns, url from myapp.views import MyView urlpatterns = patterns('', url(r'^mine/$', MyView.as_view(), name='my-view'), )
2. django.views.generic.base.TemplateView
在 get_context_data() 函数中,可以传一些 额外内容 到 模板# views.py from django.views.generic.base import TemplateView from articles.models import Article class HomePageView(TemplateView): template_name = "home.html" def get_context_data(self, **kwargs): context = super(HomePageView, self).get_context_data(**kwargs) context['latest_articles'] = Article.objects.all()[:5] return context # urls.py from django.conf.urls import patterns, url from myapp.views import HomePageView urlpatterns = patterns('', url(r'^$', HomePageView.as_view(), name='home'), )
3. django.views.generic.base.RedirectView
用来进行跳转, 默认是永久重定向(301),可以直接在urls.py中使用,非常方便:from django.conf.urls import patterns, url from django.views.generic.base import RedirectView urlpatterns = patterns('', url(r'^go-to-django/$', RedirectView.as_view(url='http://djangoproject.com'), name='go-to-django'), url(r'^go-to-ziqiangxuetang/$', RedirectView.as_view(url='http://www.ziqiangxuetang.com',permant=False), name='go-to-zqxt'), )
二.Generic Display View (通用显示视图)
1. django.views.generic.detail.DetailView
DetailView 有以下方法:dispatch()
http_method_not_allowed()
get_template_names()
get_slug_field()
get_queryset()
get_object()
get_context_object_name()
get_context_data()
get()
render_to_response()
# views.py from django.views.generic.detail import DetailView from django.utils import timezone from articles.models import Article class ArticleDetailView(DetailView): model = Article # 要显示详情内容的类 template_name = 'article_detail.html' # 模板名称,默认为 应用名/类名_detail.html(即 app/modelname_detail.html) # 在 get_context_data() 函数中可以用于传递一些额外的内容到网页 def get_context_data(self, **kwargs): context = super(ArticleDetailView, self).get_context_data(**kwargs) context['now'] = timezone.now() return context # urls.py from django.conf.urls import url from article.views import ArticleDetailView urlpatterns = [ url(r'^(?P<slug>[-_\w]+)/$', ArticleDetailView.as_view(), name='article-detail'), ]
article_detail.html
<h1>标题:{{ object.title }}</h1> <p>内容:{{ object.content }}</p> <p>发表人: {{ object.reporter }}</p> <p>发表于: {{ object.pub_date|date }}</p> <p>日期: {{ now|date }}</p>
2. django.views.generic.list.ListView
[b]ListView 有以下方法:[/b]dispatch()
http_method_not_allowed()
get_template_names()
get_queryset()
get_context_object_name()
get_context_data()
get()
render_to_response()
# views.py from django.views.generic.list import ListView from django.utils import timezone from articles.models import Article class ArticleListView(ListView): model = Article def get_context_data(self, **kwargs): context = super(ArticleListView, self).get_context_data(**kwargs) context['now'] = timezone.now() return context # urls.py: from django.conf.urls import url from article.views import ArticleListView urlpatterns = [ url(r'^$', ArticleListView.as_view(), name='article-list'), ]
article_list.html
<h1>文章列表</h1> <ul> {% for article in object_list %} <li>{{ article.pub_date|date }} - {{ article.headline }}</li> {% empty %} <li>抱歉,目前还没有文章。</li> {% endfor %} </ul>
官方文档:猛戳这里!
相关文章推荐
- Django笔记 自定义ListView通用视图
- Python Django进阶教程(四)(通用视图)
- Django学习笔记之:【通用视图 (generic views) 】
- 【django 学习笔记】10-通用视图
- Django笔记7(通用视图)
- Django进阶——通用视图
- 千与千寻django(六)---通用视图(Generic views)
- 在Django中创建URLconf相关的通用视图的方法
- 在Python的Django框架中使用通用视图的方法
- 20121029 The django book 笔记 高级视图和URL配置
- Django 视图层之视图函数(views) 笔记
- Django学习(四)(视图与网址进阶)
- 详解Python的Django框架中的通用视图
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
- 【Django第一步】第四部分:表单和通用视图
- django基于类的通用视图
- [进阶]MySQL学习笔记七之视图view
- Django进阶——高级视图和url配置
- Django学习笔记(11):视图进阶(上)
- Django笔记教程:三、Model进阶