本人用的是django 2.0 结果在要实现一个动态匹配 URL的时候,碰到了一个坑。
网页很简单,就是/time/ 显示当前时间
扩展一下 当输入/time/plus/1 显示当前时间加1小时的时间
当输入/time/plus/2 显示当前时间加2小时的时间
以此类推。
结果按照教程的配置:
url(r'^time/plus/(\d{1,2})/$', hours_ahead),
结果死活 都报404
换成
url(r'time/plus/(\d{1,2})/', hours_ahead), 也是不行。因为我之前的匹配模式都不带^ 和$
后来问度娘才发现其中的真谛。
django 1.0的匹配模式 上述不会出现问题,结果django 2.0的匹配模式这一块有修改。要修改为:
path(r'time/plus/<int:offset>/',hours_ahead),
offset 是你视图函数的参数。必须保持一致。
注意:
要捕获一段url中的值,需要使用尖括号,而不是之前的圆括号。
可以转换捕获到的值为指定类型,比如例子中的int。默认情况下,捕获到的结果保存为字符串类型,不包含/这个特殊字符
匹配模式的最开头不需要添加/,因为默认情况下,每个url都带一个最前面的/,既然大家都有的部分,就不用良妃时间特别写一个了。
匹配例子:
/articles/2005/03/ 将匹配第三条,并调用views.month_archive(request, year=2005, month=3);
/articles/2003/匹配第一条,并调用views.special_case_2003(request);
/articles/2003/03/building-a-django-site/ 将匹配最后一个,并调用views.article_detail(request,
year=2003, month=3, slug="building-a-django-site"
参考文档: