所以我正在尝试为我的Django博客实现像Toggle这样的帖子 - 我希望覆盖get_redirect_url,以便用户可以在我的博客上发布帖子。我按如下方式概述了课程:
class PostLikeToggle(RedirectView):
def get_redirect_url(self, *args, **kwargs):
slug = self.kwargs.get("slug")
obj = get_object_or_404(Post, slug=slug)
url_ = obj.get_absolute_url()
self.request.user
if user.is_authenticated():
obj.likes.add(user)
return url_
然而,我认为的问题在于我如何获得我的帖子对象 - 我目前正在使用post slug。我想定义SEO友好的帖子列表,因此我定义了url模式如下:
url_patterns = [
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
r'(?P<post>[-\w]+)/$', views.post_detail, name = 'post_detail'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
r'(?P<post>[-\w]+)/like/$', views.PostLikeToggle.as_view(), name = 'post_like'),
]
我已经尝试通过在网址中将<post>
替换为<slug>
来修改上述内容以引用“slug”。没工作。然后我尝试在get_redirect_url函数中定义post:
post = self.kwargs.get("post")
obj = get_object_or_404(Post, post=post)
再一次,没有用。我只是尝试各种各样的事情来尝试让它发挥作用 - 但遗憾的是,没有运气 - 所以我会把它扔给Django争吵社区中你经验丰富的人。
谢谢。
答案 0 :(得分:1)
如果您的网址格式包含(?P<post>[-\w]+)
,则应使用self.kwargs.get("post")
代替self.kwargs.get("slug")
。
在get_object_or_404
中,您必须使用slug=
而不是post=
,因为您要对Post.slug
字段进行过滤。
def get_redirect_url(self, *args, **kwargs):
slug = self.kwargs.get("post")
obj = get_object_or_404(Post, slug=slug)
...
如果slug仅对每个日期而言是唯一的,那么您可能还必须从year
获取month
,day
和self.kwargs
。