# 一、路由配置
路由简单的来说就是根据用户请求的URL链接来判断对应的处理程序,并返回处理结果,也就是URL与Django的视图建立映射关系
Django路由在urls.py配置,urls.py中的每一条配置对应相应的处理方法
from django.urls import path
from . import views, testdb, search, search_post
urlpatterns = [
path('hello/', views.hello),
path('test/', views.test),
path('mysql_add/', testdb.testdb_add),
path('mysql_quire/', testdb.testdb_quire),
path('mysql_edit/', testdb.testdb_edit),
path('mysql_delete/', testdb.testdb_delete),
path('search_form/', search.search_form),
path('search/', search.search),
path('search_post/', search_post.search_post),
]
# 二、路由分发
Django项目里多个app目录共用一个 urls 容易造成混淆,后期维护也不方便
解决:使用路由分发(include),让每个app目录都单独拥有自己的 urls
步骤:
- 在每个 app 目录里都创建一个urls.py文件
- 在项目名称目录下的urls文件里,统一将路径分发给各个app目录
from django.contrib import admin
# 从django.urls引入include
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("app01/", include("app01.urls")),
path("app02/", include("app02.urls")),
]
在各自 app 目录下,写自己的 urls.py 文件,进行路径跳转。
app01的urls.py:
from django.urls import path,re_path
# 从自己的app目录引入views
from app01 import views
urlpatterns = [
re_path(r'^login/(?P<m>[0-9]{2})/$', views.index),
]
app02的urls.py:
from django.urls import path,re_path
# 从自己的app目录引入views
from app02 import views
urlpatterns = [
re_path("^xxx/(?P[0-9]{4})/$", views.xxx),
]
# 三、反向解析
随着功能的增加,路由层的url发生变化,就需要去更改对应的视图层和模板层的url,不便维护
可以利用反向解析,当路由层url发生改变,在视图层和模板层动态反向解析出更改后的url,免去修改的操作
反向解析一般用在模板中的超链接及视图中的重定向
步骤:
- 在urls.py中给路由起别名,name="路由别名",如:
path("login1/", views.login, name="login")
- 在views.py中,从django.urls中引入reverse,利用reverse("路由别名")反向解析:
return redirect(reverse("login"))
- 在模板templates中的HTML文件中,利用{% url "路由别名" %}反向解析,如:
<form action="{% url 'login' %}" method="post">