(django)6路由基本使用
程序员文章站
2022-06-22 11:20:27
路由定义位置 django的路由是定义在 文件下的 列表中的。 文件是路由解析的入口。 一般每个子应用为了独立,都有自己的 来保存该应用的路由,然后使用 函数把子路由包含在主路由中。 也可以把所有的路由都定义在主路由中,子应用不再设置。 路由的解析顺序 django的路由解析是从上到下的,djang ......
路由定义位置
django的路由是定义在 urls.py
文件下的 urlpatterns
列表中的。 urls.py
文件是路由解析的入口。
from django.conf.urls import url from . import views urlpatterns = [ url(r'^', views.index, name="index") ]
一般每个子应用为了独立,都有自己的 urls.py
来保存该应用的路由,然后使用 include
函数把子路由包含在主路由中。
# 子路由 from django.conf.urls import url from . import views urlpatterns = [ url(r'^', views.index, name="index") ]
# 使用include函数把子路由包含在主路由中 from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^demo/', include("demo.urls")) ]
也可以把所有的路由都定义在主路由中,子应用不再设置。
from django.conf.urls import url from django.contrib import admin from demo.views import index urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^demo/', index) ]
路由的解析顺序
django的路由解析是从上到下的,django接收到一个请求后,他会从主工程的路由文件中 urls.py
下的 urlpatterns
列表从上到下匹配,匹配到一个符合规则的路由,会执行后边的函数。如果后边是 include
函数,则会进入包含的子路由中,从上到下匹配。
如果django匹配到一个符合规则的路由,会立即执行后面的函数,而不会继续向下执行。所以,当上边的匹配规则如果包含了下边的规则,可能会把下边的路由屏蔽掉。
urlpatterns = [ url(r'^say', views.say), url(r'^sayhello', views.sayhello), ]
即使访问 sayhello
路径,他也会进入到 say
函数执行,因为他先匹配成功了 say
的路由规则。
所以定义路由规则描述要准确,或者用 /
结尾。
路由命名
在定义路由的时候,可以指定第三个参数,来为路由起别名
- 使用
include
定义的路由时,在include
函数中使用关键字参数namespace
定义命名空间
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^demo/', include("demo.urls", namespace="demo")) ]
- 命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
- 只使用
url
定义路由时,使用关键字参数name
定义路由名字
urlpatterns = [ url(r'^', views.index, name="index") ]
reverse反解析
使用reverse函数,可以根据路由名称,返回具体的路径,如:
from django.core.urlresolvers import reverse # 注意导包路径 def index(request): return httpresponse("hello world!") def say(request): url = reverse('users:index') # 返回 /users/index/ print(url) return httpresponse('say')
对于未指明namespace的,reverse(路由name)
对于指明namespace的,reverse(命名空间namespace:路由name)
下一篇: dp算法之平安果路径问题c++