Django 编写 URL 相关(普通和正则)
正规详细的参考资料可以参考官方文档:https://docs.djangoproject.com/zh-hans/3.2/topics/http/urls/
这里仅仅是记录一下几个我在学习过程中的例子和踩过的坑。
示例一:编写一个简单的 URL
首先,在站点目录的 url.py
中编写 URL 规则
这个是创建项目(使用 PyCharm)时自动生成的目录。
1 |
|
说明
from django.urls import include
这行代码对应path('', include('index.urls'))
,使用自己加的 APP 的文件下的urls.py
必须要这样做
然后在 index 文件夹下编写 urls.py
,上面引用的 index.urls
就是这个文件
1 |
|
说明
- 这里的
from . import views
表示引用当前文件夹下的views.py
然后我们需要在 views.py
文件中编写 index()
函数
1 |
|
注释下面的代码即后加的代码。
最后,我们可以运行项目,然后在浏览器中打开 http://127.0.0.1:8000/
测试一下了
因为我们之前的 path()
第一个参数设置的是空字符串,所以,我们在浏览器地址栏输入的地址后,就会最终执行 index()
函数,然后显示相关信息。
示例二,带变量的 URL
注意,下面的操作全部是在 index
文件夹下。
普通写法
1 |
|
然后编写 mydate()
函数
1 |
|
接下来的操作没什么不同。
正则表达式写法
这也是我踩坑的写法。
urls.py
文件
1 |
|
说明
- 这里正则表达式最好要以
$
结尾,不然,在.html
后面输入无限长的字符串程序也能正常访问。
然后编写 mydate()
函数
1 |
|
然后运行,
这里是正确的写法。我踩的坑其实是把正则表达式给写错了,具体就是多写了一个花括号 }
,然后访问 URL 时就总是 404。
其他
在写上面的正则表达式时,我测试过这样一种写法
1 |
|
即,利用正则表达式的规则,强制 URL 必须以正斜杠结尾,但是,实际测试时,发现结尾不写正斜杠也能够正常访问。原因是 Django 中有这样一个配置 APPEND_SLASH
,它的默认值是 True
,作用是如果 URL 结尾没有正斜杠,那么 Django 会默认把它加在末尾。这个变量我们可以在 django/conf/global_settings
中找到。如果我们想要更改其为 False
,只需要在项目的站点目录下的 settings.py
中写下如下代码即可
1 |
|
APPEND_SLASH
在源码中的位置 ↓
参考:stackoverflow 文档 官方文档 《玩转 Django 2.0 - 黄永祥》