雖然欠了攢了好幾篇沒寫,可是這個要寫先記下來,太零碎了容易忘html
一路看過來通常用法無非是ide
1.HttpResponse函數
2.renderthis
3.render_to_responseurl
而後看到一個通用視圖能夠解決部分代碼冗餘問題。可是一開始看例子一臉懵逼(可能我找到的都是不愛寫註釋的人的文章)spa
心裏:這啥呀?怎麼就拿到數據了?怎麼拿的?何時就傳過去了呀?code
好比這樣,還須要改一下urls,改個pk主鍵上去就行orm
class DetailView(generic.DetailView): model = Question template_name = 'polls/detail.html' class IndexView(generic.ListView): template_name = 'polls/index.html' context_object_name = 'latest_question_list' def get_queryset(self): return Question.objects.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]
而後一頭霧水htm
找了半天,在list.py裏找到了一些端倪,首先是下面這個類blog
class MultipleObjectMixin(ContextMixin): """ A mixin for views manipulating multiple objects. """ allow_empty = True queryset = None model = None paginate_by = None paginate_orphans = 0 context_object_name = None paginator_class = Paginator page_kwarg = 'page' ordering = None
這個類是根據get_queryset的指引找來的,繼承自這個Mixin,發現這堆參數。結合羣衆的智慧,好了不瞎扯了
裏面的template_name指定模板名稱,context_object_name指定上下文變量,也就是要套入模板中的數據,而後還有一個就是model,數據來源,若是指定了model
那麼該通用視圖就變成了至關於model.objects.all(),從這個模型裏把數據都拿出來,這樣不是很好用,不友好。因此它給了一個get_queryset的方法來自定義上下文變量
默認的是下面這樣,重寫一下用就好了
def get_queryset(self): """ Return the list of items for this view. The return value must be an iterable and may be an instance of `QuerySet` in which case `QuerySet` specific behavior will be enabled. """ if self.queryset is not None: queryset = self.queryset if isinstance(queryset, QuerySet): queryset = queryset.all() elif self.model is not None: queryset = self.model._default_manager.all() else: raise ImproperlyConfigured( "%(cls)s is missing a QuerySet. Define " "%(cls)s.model, %(cls)s.queryset, or override " "%(cls)s.get_queryset()." % { 'cls': self.__class__.__name__ } ) ordering = self.get_ordering() if ordering: if isinstance(ordering, six.string_types): ordering = (ordering,) queryset = queryset.order_by(*ordering) return queryset
其餘的方法用到再從新寫
而後是
用法是通常只在須要返回一個模板的時候用,指定一下template_name就行,待補充。
對比ListView和DetailView二者,ListView用來獲取model中的全部數據,而DetailView是得到某個數據的詳細信息,好比一張試卷,前者得到試卷的名稱之類的簡要信息,後者獲取試卷的題目等詳細信息
用這個就用到上面說的須要在urls改爲傳遞主鍵值來進行查詢。
參數也有這麼一堆
class SingleObjectMixin(ContextMixin): """ Provides the ability to retrieve a single object for further manipulation. """ model = None queryset = None slug_field = 'slug' context_object_name = None slug_url_kwarg = 'slug' pk_url_kwarg = 'pk' query_pk_and_slug = False
其中pk_url_kwarg就是主鍵,而後裏面有一個相似ListView中get_queryset的方法叫get_object。用法也相似
而後都有的添加額外的信息(模型之外的數據)的方法叫get_context_data。
而後相似的通用視圖還有CreateView,UpdateView,FormView,DeleteView。。。做用嘛,看名字就行了
待補充吧。。。