我想获取pk或“ views.py”中每个帖子的ID,以便可以将其用于过滤并获取“ get_context_data”中的额外数据(最终,我想检查当前登录用户对每个帖子)。网站运行时,显示错误消息“ / post处的KeyError”。
这可能是个问题吗?
我试图在django的官方网站(https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/)中使用示例。
我看不到这个例子和我的例子有明显的区别。
class PostList(ListView):
model = Post
template_name = 'post/post_list.html'
def get_queryset(self):
self.post = get_object_or_404(Post, pk=self.kwargs['pk'])
return Post.objects.filter(pk=self.post)
def get_context_data(self, **kwargs):
context = super(PostList, self).get_context_data(**kwargs)
context['post_info'] = self.post
context['check_access'] = Access.objects.filter(sender
return context
urlpatterns = [
path('<int:pk>', PostList.as_view(), name='post_list'),
]
我希望看到每个帖子的pk或id,但是显示在下面:
self.post = get_object_or_404(Post, pk=self.kwargs['pk']) ...
▼ Local vars
Variable Value
args
()
kwargs
{}
self
<post.views.PostList object at 0x107ab0ba8>
答案 0 :(得分:0)
该URL缺少主键。您必须包含它,例如:
8
然后,您可以使用以下方法进行查询:
urlpatterns = [
path('<int:pk>', PostList.as_view(), name='post_list'),
]
使用localhost:8000/post/123
要为其检索数据的主键。
但是,不是看起来像ListView
[Django-doc]。渲染对象的列表时,应使用123
。看起来更像是DetailView
[Django-doc]。
ListView
的好处是它甚至可以自动过滤主键和子键。如果不存在这样的对象,它将自动引发404响应。
所以您可能想使用:
DetailView
context_object_name
[Django-doc]指定该对象的模板变量的名称。