覆盖 RedirectView 通用视图的 get_redirect_url 函数的问题
Issues overriding the get_redirect_url function for the RedirectView generic view
所以我正在尝试为我的 Django 博客实现一个类似 Toggle 的 post - 我希望覆盖 get_redirect_url 这样用户就可以喜欢 posts在我的博客上。我概述了 class 如下:
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 对象 - 我目前正在 post slug 上执行此操作.我想定义 SEO 友好的 post 列表,因此我定义了 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'),
]
我已尝试修改以上内容以通过在 url 中将 <post>
替换为 <slug>
来引用 "slug"。没用。然后我尝试在 get_redirect_url 函数中定义 post:
post = self.kwargs.get("post")
obj = get_object_or_404(Post, post=post)
同样,没有用。我只是在尝试各种方法来尝试让它发挥作用——但遗憾的是,还没有运气——所以我想把它扔给 Django 争论社区中更有经验的人。
谢谢。
如果您的 url 模式包含 (?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 对于每个日期都是唯一的而不是唯一的,那么您可能还必须从 self.kwargs
中获取 year
、month
和 day
。
所以我正在尝试为我的 Django 博客实现一个类似 Toggle 的 post - 我希望覆盖 get_redirect_url 这样用户就可以喜欢 posts在我的博客上。我概述了 class 如下:
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 对象 - 我目前正在 post slug 上执行此操作.我想定义 SEO 友好的 post 列表,因此我定义了 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'),
]
我已尝试修改以上内容以通过在 url 中将 <post>
替换为 <slug>
来引用 "slug"。没用。然后我尝试在 get_redirect_url 函数中定义 post:
post = self.kwargs.get("post")
obj = get_object_or_404(Post, post=post)
同样,没有用。我只是在尝试各种方法来尝试让它发挥作用——但遗憾的是,还没有运气——所以我想把它扔给 Django 争论社区中更有经验的人。
谢谢。
如果您的 url 模式包含 (?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 对于每个日期都是唯一的而不是唯一的,那么您可能还必须从 self.kwargs
中获取 year
、month
和 day
。