2017-06-09 22 views
0

所以我想實現一個像後切換爲我的Django的博客 - 我期待重寫get_redirect_url使得用戶可以像在我的博客文章。我已經概述了類,如下所示:問題重寫get_redirect_url功能RedirectView的通用視圖

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_ 

然而,我認爲這個問題是我如何得到我的崗位目標 - 我目前正在做這在後塞。我一直想定義搜索引擎友好的帖子列表中,我因此所定義的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與<slug>更換<post>引用「鼻涕蟲」。沒有工作。然後我嘗試在get_redirect_url函數中定義post:

 post = self.kwargs.get("post") 
     obj = get_object_or_404(Post, post=post) 

再次,沒有工作。我只是嘗試各種各樣的事情來嘗試並使其發揮作用 - 但遺憾的是,還沒有運氣 - 所以我儘管在Django爭論不休的社區中將其拋棄給了更多經驗豐富的人。

謝謝。

回答

2

如果您的網址格式包含(?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) 
    ... 

如果蛞蝓只有對於每一日期,而不是獨特唯一的,那麼你可能需要獲取yearmonthdayself.kwargs爲好。

+0

麥金太爾嗨 - 真棒,這是現在的工作。謝謝。我已經接受了正確的答案(我可以看到你爲什麼有115k,然後一些!)。經過思考,你的建議很好的話,我應該保持'後= self.kwargs.get( 「後」)'和'使用OBJ = get_object_or_404(郵政,蛞蝓=後)'(而不是'OBJ = get_object_or_404(郵政,郵政=後)') –

+0

是的,這是正確的,你的問題是你的努力後'='而不是'塞='了'get_object_or_404'。 – Alasdair