路由系统:
1、可以使用includ进行url分发
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^app01/', include("APP01.urls")), url(r'^app02/', include("APP02.urls")), ] from django.conf.urls import url, include from django.contrib import admin from APP01 import views urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^index/', views.index), ]
2、例如编辑的时候,以往是通过
<a href="/app01/edit/?id={{ id }}">编辑</a>
这样的方式发送到后端,现在可以使用路由中的正则来匹配,
如:
路由中:
url(r'^edit/(\w+)/', views.edit),
视图中:
def edit(request, name):
print(name)
模版中:
<a href="/app01/edit/{{ user }}">编辑</a>
3、路由系统中url正则组还可以自定义命名,视图中根据正则组名字来取
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+)', views.edit),
]
上述就是给两个正则组分别命名为p1、p2,需要注意的是,正则组如果采用位置就都采用位置,如果采用名字就都采用名字
路由正则尽量以$结尾,如果以 / 结尾的话 /前面可以无限写东西
4、伪静态(路由系统中url后缀加.html),目的是让用户感觉到是静态文件,加载很快的样子
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+).html/$', views.edit),
]
5、路由系统反向生成url(根据名字反向寻找url)
应用场景:比如说不同的用户有不同的权限能访问不同的url,如果把每个人能访问的url都放进数据库占空间,而直接放反向生成的别名就好了。
在python代码中可以应用:
路由中:
urlpatterns = [
url(r'^edit/(?P<a1>\w+)/(?P<a2>\w+).html/$', views.edit, name="t2"),
]
视图中:
from django.urls import reverse
v = reverse("t2", kwargs={"a1": "alex", "a2": 18})
print(v)
在模版中可以应用:
<form method="post" action="{% url "t2" %}">
<input type="text">
</form>