我最近从PHP切换到了Django。我在PHP中的旧网站已经集成了Disqus,当我迁移到新网站时,我的博客网址已从 / blog /< year> /< month> /< slug> 到 / blog /< slug>
所有新评论都会自动获取新网址,但仍有很多旧链接仍为 < year> /< month> /< slug> 的
现在我希望它将所有 / blog /< year> /< month> /< slug> 重定向到 /博客/<蛞蝓> 的
我尝试了以下内容:
url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<slug>[^\.]+)', RedirectView.as_view(url=reverse_lazy('view_blog_post'))),
url(r'^(?P<slug>[^\.]+)', 'blog.views.view_post', name='view_blog_post'),
这给了我以下错误:
view_post() got an unexpected keyword argument 'year'
这似乎是显而易见的,因为我的观点只把slug作为一个论点。我不想写另一个视图来合并这个变化,因为它是暂时的。
请帮我找到解决方案。
问候。
答案 0 :(得分:1)
view_blog_post
模式需要一个slug,所以你不能只做reverse_lazy('view_blog_post')
因为它不使用slug。
相反,您可以使用pattern_name
参数,然后Django将使用args和kwargs来反转网址。
您还希望使用?:
制作年份和月份non capturing groups,因为您不想使用这些来反转网址。
url(r'^(?:\d{4})/(?:\d{1,2})/(?P<slug>[^\.]+)', RedirectView.as_view(pattern_name='view_blog_post', permanent=True)),
默认的permanent
在Django 1.9中切换到False
,因此明确设置它以防止它在升级时意外更改是很好的。