需要帮助我的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
。
非常感谢任何帮助。谢谢。
答案 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')
。
希望这有助于:)