URL控制系统
urls.py文件
urls.py文件是做路由分发的,通过一个叫做urlpatterns的列表,里面的值是一个个的url()方法,这些url()方法对应了一个个URL
下面对这个url()方法做详细介绍
url()参数说明
参数一
参数一是一个正则表达式,例如:r'article/\d{4}',表示可以匹配article/2004也可以匹配article/2011等URL,这在做分页的时候非常方便
从视图函数中获取URL参数
在urls.py中使用正则表达式书写URL,注意:要将正则表达式分组才能拿到想要的参数
例如:url("rticle/(\d{4})", views.index) ,将\d{4}分组
那么在views.py的相应视图函数中就可以得到分组里的参数
views.py
def index(request, year): # 这个year就是上面分组中的内容,如果有两个分组就传两个参数
return HttpResponse(year) # 这样就可以动态的显示Url中的内容
给分组命名
在上面的无命名分组中,虽然可以写多个分组,但是在视图函数中去获取的时候必须按顺序获取,这比较的痛苦,那么当给每个分组命名后,就可以通过名字去绑定分组,不在需要按照顺序去获取,但是给分组命名后,在视图函数中的形参名就必须是跟分组相同的名字,否则就会报错
# 通过 ?P<名字> 给分组命名
url("rticle/(?P<year>\d{4})/(?P<month>\d{2})", views.index)
在views.py中获取分组信息
def index(request, year, month):
return HttpResponse("%s, %s" % (year, month))
参数二
url()的第二个参数是要处理该条URL的视图函数
参数三
参数
参数四
第四个参数是一个别名,相当于给该条URL起了一个名字,这样在项目中用到这个URL的时候就用别名代替,以后在更改了该条URL的时候就不用每个地方都修改了
例如:
url('show_time/', views.show_time, name="reg"), # 这里给该条URL的别名为 reg
在html中调用
{% url 'reg' %} # 相当于 /show_time/
利用这个名字除了可以在html页面生成URL外,还可以在python中生成,最常见的便是在视图函数中生成,如下一段URL
url(r'^index.html/(?P<username>\w+)$', view.index, name='index')
想要在python中生成对应的URL,可以利用reverse函数
from django.urls import reverse
def index(request):
# url里面有分组参数
path = reverse('index', kwargs={'username': 'nice'})
# url里面没有分组参数
path = reverse('index')
以上便是在python中生成URL的方法
url分发
当项目大起来的时候,URL过多,全部放在一个文件下回很乱,而且还会相互影响,所以应该在每一个应用下面单独放一个urls.py文件,用于存放本应用的URL,然后把这个urls.py文件跟主urls,py关联起来就可以了
在主urls.py文件中配置
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include("blog.urls")), # 添加这样一行与blog应用的urls.py文件关联,表示下一次URL中有 blog/的全部去 blog.urls 里面去找
path('chat/', include('chat.urls')),
]
应用下的urls.py
在blog应用目录下新建一个urls.py文件,在里面写有关于blog应用的URL
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'show_time', views.show_time),
]
这样后,URL路径就变成了 127.0.0.1:8000/blog/show_time,注意必须要有/blog才能进blog目录下的urls.py文件继续查找 /show_time URL

浙公网安备 33010602011771号