我有Post
。在索引页面中,我显示了所有这些内容,按created_at
排序,如下所示:
class IndexView(TemplateView):
template_name = 'blog/index.html'
def get(self, request):
return render (request, self.template_name, {
'posts': Post.objects.order_by('-created_at')
})
我创建了一个视图,我打算重定向到另一个页面,显示整个帖子。这是url.py:
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name = 'index'),
url(r'^categories/$', views.CategoriesView.as_view(), name = 'categories'),
url(r'^post/(?P<id>[0-9]+)/$', views.Post.as_view(), name = 'post')
]
以及这样的观点:
class Post(TemplateView):
template_name = 'post.html'
def get(self, request):
id = request.GET.get('id', '')
return render(request, self.template_name, {
'post': get_object_or_404(Post, pk = id)
})
但后来我收到了错误:
/
中的AttributeError类型对象'Post'没有属性'objects'。
答案 0 :(得分:3)
不要将您的视图和模型命名为相同!例如,将其称为PostView
,问题将得到解决:
class PostView(TemplateView):
...
和
url(r'^post/(?P<id>[0-9]+)/$', views.PostView.as_view(), name = 'post')
您还使用URL重新路由传递id
参数;不是通过GET
。将方法签名更改为:
def get(self, request, id):
并直接使用id
变量。