如何在我的django代码中用ListView替换list_detail

时间:2014-09-06 16:08:37

标签: python django listview python-2.7

我有一段使用django.views.generic.list_detail的代码,在旧版本的python和django中运行良好。我知道list_detail在当前版本中不再存在,已被django.views.generic.list.ListView取代。但我还没有想出如何替换我的代码,以便像以前那样工作。我查了this question但我仍然没有线索。

这是我的代码(我是从here获得的):

urls.py

from django.conf.urls.defaults import *
from django.views.generic import list_detail
from mysite.books.models import Publisher

publisher_info = {
                    'queryset': Publisher.objects.all(),
                    'template_name': 'publisher_list_page.html',
                    'template_object_name': 'publisher',          >> **
                    'extra_context': {'book_list': Book.objects.all} 
                    }

urlpatterns = patterns('',
                    (r'^publishers/$', list_detail.object_list, publisher_info)
                    )

publisher_list_page.html

{% extends "base.html" %}
{% block content %}
                    <h2>Publishers</h2>
                    <ul>
                       {% for publisher in publisher_list %}       
                          <li>{{ publisher.name }}</li>
                       {% endfor %}
                    </ul>
{% endblock %}

我不想让我的views.py参与新代码。

有人可以帮我吗?感谢。

1 个答案:

答案 0 :(得分:0)

您可以为as_view方法提供其他参数。例如:

urlpatterns = patterns('',
                   (r'^publishers/$', ListView.as_view(
                       queryset=Publisher.objects.all(), 
                       template_name='publisher_list_page.html'
                   )))

但在您的情况下,您应该继承通用视图并提供自己的get_context_data方法,因为基于类的通用视图不再支持extra_context关键字