2012-12-27 32 views
1

我的IDE(PyCharm)持續報告:基於函數的通用視圖已被棄用。切換到基於類的list_detail

我在導入列表如下聲明:

from django.views.generic.list_detail import object_list 

而我的看法如下所示:

def category(request, id, slug=None): 
    category = Category.objects.get(pk=id) 

    books = Book.objects.filter(
     Q(status = 1) & Q(category=category) 
    ).order_by('-id') 

    s = Poet.objects.order_by('?')[:3] 

    return object_list(
     request, 
     template_name = 'books/categories/show.html', 
     queryset = books, 
     paginate_by = 99, 
     extra_context = { 
      'category': category, 
      'suggestions': s, 
      'bucket_name': config.BOOKS_BUCKET_NAME, 
      } 
    ) 

我發現SO this,但該文檔似乎在這個過於複雜看待。

關於如何我可以轉換我的代碼的任何提示,將不勝感激。

回答

1

你可以嘗試這樣的事情

from django.views.generic import ListView 

class CategoryView(ListView): 
    template_name = 'books/categories/show.html' 
    paginate_by = 99 

    def get_queryset(self): 
     self.category = Category.objects.get(pk=self.kwargs['id']) 

     books = Book.objects.filter(
      Q(status = 1) & Q(category=self.category) 
     ).order_by('-id') 

     self.s = Poet.objects.order_by('?')[:3] 

     return books 

    def get_context_data(self, **kwargs): 
     context = super(CategoryView, self).get_context_data(**kwargs) 
     context['category'] = self.category 
     context['suggestions'] = self.s 
     return context 

這段代碼沒有進行測試,請報告回來,如果它是爲你工作。 注意,這本書名單將通過上下文變量「object_list中」,如果你想給它,你可以使用「context_object_name」類成員一個不同的名稱:

class CategoryView(ListView): 
    template_name = 'books/categories/show.html' 
    context_object_name = 'books' 
    ... 

,並在你的urls.py使用幾乎工作除我的基於類的視圖的as_view()方法

url(r'your pattern', CategoryView.as_view(), name='whatever') 
+0

由於有一個自定義分頁:{%如果is_paginated%} {%負載分頁程序%} {%分頁程序3%} {%ENDIF%}。 ..和paginator.py自定義模板標籤我有def paginator(上下文,adjacent_pages = 2,is_random = False):此函數的第一行是startPage = max(context ['page'] - adjacent_pages,1)。它給出以下錯誤:例外類型:\t KeyError 例外值:\t 'page'。怎麼了? –

+1

嘗試使用max(context ['page_obj'])..而不是max(context ['page'])並查看它是如何去的 – ppetrid

+0

我得到:不支持的操作數類型爲 - :'Page'和'int 」。這是我的代碼:http://bpaste.net/show/Puu0jMqkGcUqy1N9vXwH/ –