从 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