在 Django 1.6.5 中使用 urls.py 中的参数重定向 URL
Redirect URL with Argument in urls.py in Django 1.6.5
我最近从 PHP 切换到 Django。我在 PHP 的旧站点集成了 Disqus,当我迁移到新站点时,我的博客 urls 从 /blog// 更改/ 到 /blog/
所有新评论都自动取新的url,但是有很多旧的链接还是<年>/<月的形式>/<鼻涕虫>
现在我想让它重定向所有 /blog/// 到 /博客/<鼻涕虫>
我尝试了以下方法:
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 作为参数。我不想编写另一个视图来合并此更改,因为它是临时的。
请帮我找到解决办法。
此致。
view_blog_post
模式需要一个 slug,所以你不能只做 reverse_lazy('view_blog_post')
因为它不使用 slug。
相反,您可以使用 pattern_name
参数,然后 Django 将使用 args 和 kwargs 来反转 url.
您还想使用 ?:
制作年份和月份 non capturing groups,因为您不想使用这些来反转 url。
url(r'^(?:\d{4})/(?:\d{1,2})/(?P<slug>[^\.]+)', RedirectView.as_view(pattern_name='view_blog_post', permanent=True)),
permanent
的默认值在Django 1.9中切换到False
,所以最好明确设置它以防止它在升级时意外更改。
我最近从 PHP 切换到 Django。我在 PHP 的旧站点集成了 Disqus,当我迁移到新站点时,我的博客 urls 从 /blog/
所有新评论都自动取新的url,但是有很多旧的链接还是<年>/<月的形式>/<鼻涕虫>
现在我想让它重定向所有 /blog/
我尝试了以下方法:
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 作为参数。我不想编写另一个视图来合并此更改,因为它是临时的。
请帮我找到解决办法。
此致。
view_blog_post
模式需要一个 slug,所以你不能只做 reverse_lazy('view_blog_post')
因为它不使用 slug。
相反,您可以使用 pattern_name
参数,然后 Django 将使用 args 和 kwargs 来反转 url.
您还想使用 ?:
制作年份和月份 non capturing groups,因为您不想使用这些来反转 url。
url(r'^(?:\d{4})/(?:\d{1,2})/(?P<slug>[^\.]+)', RedirectView.as_view(pattern_name='view_blog_post', permanent=True)),
permanent
的默认值在Django 1.9中切换到False
,所以最好明确设置它以防止它在升级时意外更改。