我是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"),
)
答案 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 = Story
,ListView
将获取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模板标记中来引用/链接到其他视图。
一些非常有用的参考文献:
有效的Django - Class Based Views
CCBV List View
Django Project Generic Display Views
Built-in template Tags and filters - &gt;查看 url