在urlpatterns中使用django.views.generic.list.ListView

时间:2013-09-17 05:43:16

标签: django

我是Django的新手,非常感谢你的帮助。

我从一本关于Django的旧书中得到了下面提到的一段代码。但是,django.views.generic.list_detail已被弃用。有人可以告诉我如何使用django.views.generic.list.ListView重新编写此代码吗?


from django.conf.urls import patterns, include, url
from cmsproject.cms.models import Story

info_dict = {'queryset': Story.objects.all(), 'template_object_name': 'story'}

urlpatterns = patterns('django.views.generic.list_detail',
     url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
     url(r'^$', 'object_list', info_dict, name="cms-home"),
)

1 个答案:

答案 0 :(得分:0)

假设您要做的只是获取Story模型对象的列表,这是编写views.py和urls.py的一种方法:

在views.py中:

from django.views.generic.list import ListView, DetailView

from cmsproject.cms.models import Story   

class StoryListView(ListView):
    model = Story
    template_name = "cms/story_list.html"

class StoryDetailView(DetailView): 
    model = Story
    template_name = "cms/story_detail.html"

template_name取决于项目放置html文件的位置。通过设置model = StoryListView将获取Story.objects.all()。要自定义,过滤,添加上下文等,您可以覆盖基于类的视图从其父视图继承的任何方法(例如,在StoryListView中,您可以覆盖ListView方法)。

在urls.py

from django.conf.urls import patterns, url

from cmsproject.cms.views import StoryDetailView, StoryListView 


    urlpatterns = patterns('',

         url(r'^(?P<slug>[-\w]+)/$', StoryDetailView.as_view(), name="cms-story"),

         url(r'^$', StoryListView.as_view(), name="cms-home"),
    )

将urls.py视为url和View对象之间的映射。定义name允许您通过将名称作为参数包含在模板中的url模板标记中来引用/链接到其他视图。

一些非常有用的参考文献: