Python Django:urls.py问题

时间:2014-04-30 02:11:04

标签: python django django-urls

需要帮助我的urls.py和其他东西。

我如何在Django中复制它?

1)当用户请求不存在的页面时,它将重定向到目录级别的一个页面。例如:example.com/somegoodpage/somebadpage应重定向到example.com/somegoodpage

2)当用户请求页面example.com/foo/bar/?name=John时,它会将网址设为example.com/foo/bar/name=John

3)当用户请求页面example.com/foo/bar/John时,它会将网址更改为example.com/foo/bar/name=John

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

对于1),如果您不想为网站上的每条路线分别执行一条路线,则需要实施process_exception并输出HttpResponseRedirect的中间件。

对于2和3,这些规则可能仅限于特定路由,因此您可以在没有中间件的情况下执行这些规则。

2可能在urls.py中使用RedirectView可行,但由于相关位是查询字符串参数,我可能会将其视为查看查询字符串的实际视图函数。在网址正则表达式中放置?字符似乎很奇怪,因为它会干扰该端点上任何其他查询字符串的使用,以及其他原因。

对于3,这是一个简单的RedirectView,您可以完全在urls.py中完成。

答案 1 :(得分:0)

根据django doc编号1:
django URL调度程序按顺序遍历每个URL模式,并在与请求的URL匹配的第一个模式停止,因此添加匹配" somebadpage" s的模式并将其分配给将用户重定向到的视图" somegoodpage"

代表2:
文档说" URLconf搜索请求的URL,作为普通的Python字符串。
这不包括GET或POST参数或域名。"
所以我不认为你可以得到"?name = John"在网址收集,所以如果你描述你想做什么,也许我可以帮助更好 对于3:
捕获URL的位并将它们作为位置参数传递给视图,您应该使用命名的正则表达式组,例如:

url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', 'news.views.month_archive'), 

并且对/ articles / 2005/03 /的请求将调用函数news.views.month_archive(request, year='2005', month='03'),而不是news.views.month_archive(request, '2005', '03')。 希望这有助于:)