django学习笔记03-Django 1.0和2.0 url模式匹配区别

本人用的是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"

参考文档:

https://www.cnblogs.com/52mm/articles/a15.html#_label0

猜你喜欢

转载自blog.csdn.net/qq_34608423/article/details/89339232