django - 在基于类的视图中获取帖子 ID
问题描述
试图在views.py 的Detailview 中获取帖子ID。我正在尝试在博客详细信息页面上添加点赞按钮。我想我需要在 get_absolute_url 函数的 kwargs 中添加 id ,但这不起作用或者我没有正确添加。所以,请帮助我。
#views.py
class PostDetail(DetailView):
model = Post
template_name = 'post_detail.html'
def get_context_data(self, *args, **kwargs):
context = super(PostDetail, self).get_context_data(*args, **kwargs)
post = get_object_or_404(Post, id=self.kwargs['id'])
is_liked = False
if post.likes.filter(id=request.user.id).exists():
is_liked = True
context["post"] = post
context["is_liked"] = is_liked
return context
模型.py
class Post(models.Model):
cover = models.URLField(blank=True)
tag = models.CharField(max_length=100, unique=True, default=0)
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(accountUser, on_delete=models.CASCADE)
updated_on = models.DateTimeField(auto_now=True)
content = models.TextField()
likes = models.ManyToManyField(accountUser, related_name='likes', blank=True)
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
class Meta:
ordering = ["-created_on"]
def __str__(self):
return self.title
def total_likes(self):
return self.likes.count()
def get_absolute_url(self):
return reverse("post_detail", kwargs={"slug": str(self.slug)})
终端错误
#error
post = get_object_or_404(Post, id=self.kwargs['id'])
KeyError: 'id'
解决方案
self.kwargs 在 get_context_data kwargs 中有所不同,而 kwargs 取决于您的 url
代替:
post = get_object_or_404(Post, id=self.kwargs['id'])
经过 :
post = self.get_object()
你在 DetailView 中,所以你有方法 get_object,用于获取你的 post 对象并验证对象是否存在
推荐阅读
- python - 如何检查数字中的连续数字是偶数还是奇数?
- javascript - 使用 moment.js 确定当前时间(以小时为单位)是否在特定时间之间
- angular - 带有选择的 Angular i18n img alt 属性
- laravel - 将数据从刀片模板传递到 vue 时出现 Vue 警告
- javascript - 使用 Express (Node.js) 在 React 应用程序中找不到 index.js
- javascript - 使用 day 对象检查数组
- charts - 添加新节点后无法使 Grahviz 的边缘笔直并正确渲染
- netsuite - Netsuite 在客户记录中多次插入地址
- java - 如何在不使用模型的情况下将 JCheckBox 列添加到我的 JTable?
- python - 模型提供了很好的训练和测试准确性,但在进行预测时效果不佳