django - 无法从 ListView 的 get_queryset 获取 kwargs
问题描述
我想在'views.py'中获取每个帖子的pk或id,以便我可以使用它来过滤和获取'get_context_data'中的额外数据(最终,我想检查当前登录用户对每个帖子的访问) . 当网站运行时,它显示错误消息“KeyError at /post”。
这可能是什么问题?
我试图在 django 的官方网站(https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/)中应用示例。
我看不出这个例子和我的有显着差异。
视图.py
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
发布/urls.py
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>
解决方案
那么 URL 缺少主键。你必须包括它,比如:
urlpatterns = [
path('<int:pk>', PostList.as_view(), name='post_list'),
]
然后您可以使用以下方式查询:
localhost:8000/post/123
使用123
您要为其检索数据的主键。
然而,这看起来不像[ ListView
Django-doc]。渲染对象列表ListView
时应使用A。这看起来更像[Django-doc]。DetailView
a 的好处DetailView
是它甚至可以自动过滤主键和 slug。如果不存在这样的对象,它将自动引发 404 响应。
所以你可能想使用:
class PostDetailView(DetailView):
model = Post
context_object_name = 'post'
template_name = 'post/post_list.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['check_access'] = Access.objects.filter(...)
return context
context_object_name
[Django-doc]指定该对象的模板变量的名称。
推荐阅读
- gstreamer - GStreamer mpegtsmux + udpsink,在发送者离线的情况下重启非常慢
- java - Java HashMap:如何为一个键添加多个值?
- excel - 比较 [Sheet 2] 和 [Sheet 1] 并将 [Sheet 1] 中缺少的唯一编号添加到 [Sheet 2] 的表格底部
- python - 使用 pymongo 连接到 Atlas MongoDb - ServerSelectionTimeoutError
- javascript - Firebase 实时数据库 - 仅订阅单个添加、更新、删除
- c# - 将带有 ComboBox 的行添加到 DataGrid
- frequency - Oscillator.detune() 在 Web Audio API 中是如何工作的?
- python-3.x - 从数据库读取 blob 而不用 Python 保存到磁盘
- json - 如何根据 JSON Schema 中其他属性的存在有条件地禁止属性?
- java - 一个一个地打印 Arraylist 元素