0

我是 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"),
)
4

1 回答 1

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 模板标记中来引用/链接到其他视图。

一些非常有用的参考资料:

于 2013-09-17T08:01:15.710 回答