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

Posted

技术标签:

【中文标题】从 URL 中获取 ID 并从数据库中选择它【英文标题】:Get the ID from URL and select it from the database 【发布时间】:2016-03-18 04:20:24 【问题描述】:

我有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 at /

type object 'Post' 没有属性 'objects'。

【问题讨论】:

您应该为此使用 DetailView。 【参考方案1】:

不要将视图和模型命名相同!比如叫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 变量。

【讨论】:

很好,错误已经改变。现在,它显示get() got an unexpected keyword argument 'id'。可能只是从 URL 中检索参数的方法。 @GabrielMFernandes 是的,这是一个不相关的错误,但请参阅我的更新答案。 错误消失了,现在我只需要弄清楚如何显示帖子,它没有显示。谢谢。 原因很愚蠢。我将block 的名称与base.html 不同。

以上是关于从 URL 中获取 ID 并从数据库中选择它的主要内容,如果未能解决你的问题,请参考以下文章

在 AJAX 中从当前 URL 发布 id 以从该 id 中选择数据

从Firestore获取一个ArrayList并从该列表中选择3个随机字符串

如何在 Angular 7 的激活链接中获取 url 参数并从服务类调用 rest api

Django 应用程序视图 - 如何从 url 中的 django 数据库中获取条目并从数据库中获取更多视图信息?

将图像保存到数据库并从服务器加载

从一个表中选择 id 并从另一个表中选择它的值进行搜索