有函数类图,还需要类视图??当然,类视图方便,好用,不信你感受感受。。。。
TemplateView
get_queryset(self)#默认取出该表所有数据。想要过滤自定义只能在get_queryset()中
个人理解:listview,detailview,templateview。前两个特别像,变量函数基本一样,templateview也差不多,只不过没有get_queryset()
。
model=Atticle#指定了数据表。他的功能相当于取出了Article中的所有数据
template_name="blog/index.html"#指定页面
context_object_name="artcle_list"#listview默认使用object_list作为上下文变量。可使用context_object_name重命名。
get_context_data(self,**kwargs)#这个方法用来添加额外的内容到上下文变量中。
Example 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
Example urls.py:
from django.conf.urls import url
from myapp.views import HomePageView
urlpatterns = [
'''
classmethod as_view(**initkwargs)¶
返回一个可调用的视图,它接受一个请求并返回一个响应:
response = MyView.as_view()(request)
'''
url(r'^$', HomePageView.as_view(), name='home'),
]
Example home.html:
{% for article in latest_articles%}
{{article.name}}
{% endfor %}
ListView、DetailView
官方文档:ListView-Django documention
个人理解:listview ,detailview的区别在是,基本没什么区别。ListView与DetailView的区别
model=Atticle#指定了数据表。他的功能相当于取出了Article中的所有数据
template_name="blog/index.html"#指定页面
context_object_name="artcle_list"#listview默认使用object_list作为上下文变量。可使用context_object_name重命名。
get_queryset(self)#默认取出该表所有数据。想要过滤自定义只能在get_queryset()中
get_context_data(self,**kwargs)#这个方法用来添加额外的内容到上下文变量中。
参考文档:
1、Class-based views官方版、
2、类视图中文翻译版
3、ListView与DetailView的区别