从URL获取ID并从数据库中选择它

时间:2016-03-18 04:20:25

标签: python django view

我有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'。

1 个答案:

答案 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变量。