Django之路由系统
1:一一对应的路由:
一个URL对应一个函数
/login/ ---> def login(request)
2:动态路由:
/login/(\d+)/ ----> def login(request,a) #正则表达式 ------------- 参数a是用来接收正则的 /login/(?p<a1>\w+)/ -----> def login(request,a1) #(?p<a1>\w+) 的好处是不用位置传参,将w+的值给a1.
3:终止符 '^ $':
'^login$'
4:伪静态(html):html就是伪静态
^login/(?p<a1>\w+).html$
5:路由分发:
在项目名的urls中用include方法,将路由分放,使每个文件件的路由关系独立。
from django.conf.urls import url,include urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^app01/', include('app01.urls')), ]
这样,app01文件夹下的url就可以独立了
app01中的url就要加上app01的路径。
在app01中的urls.py中
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login.html$',views.login), ]
在app01的views中加login
def login(request): return HttpResponse("ok")
也可在项目名中的url中,定义错误页面
def default(request): return HttpResponse("404 Not Found")
在项目名的url中设置默认页面:
url(r'^ ', views.index)
这样就默认页面是index函数的相关数据了。
6:路由别名反向生成URL(给URL的关系命名)
在url后加name,可以通过name反向找到url。
url(r'^index/',views.index,name='n1'),
在views中导入 reverse 反转。
from django.urls import reverse def index(request): user_list = [ "wang", "george", ] v = reverse("n1") print(v) #这个v就是url:index
在url中使用正则:
r'^index/(?P<a1>\w+).html$' 在函数中,def index(request,a1):
在reverse中加:
v = name('n1',args=(1, )) #数字1,不固定,写几都行。
这样写的效果就是:
在url中,无论index的后面加什么,在后端的index中,都为1。 /index/1/
在用正则时要注意的是:
(\w+) 的 reverse中为args(xxxx, ) (?p<a1>\w+) 时,reverse中为kwargs={"a1":11111}
在前端中,也可以用别名:
<from method="POST" action='/login/'> '/login/' ----> 也可以写成 "{% url "n1" %}" 这时,前端的别名会去反向生成url。
在前端的for中:
{% for i in user_list %} <li>{{ i }} | <a herf="{% url "n1" i %}"> 编辑 </a></li> {% endfor %}