URL 配置就像Django所支撑网站的目录。它的本质就是URL模式 以及要为该URL模式调用的视图函数之间的映射表。
以这种方式告诉Django , 对于指定URL 调用指定代码
格式:
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
Django 2.0:
from django.urls import path,re_path urlpatterns = [ re_path(r'^userInfo/*',views.userInfo), ]
正则表达式:一个正则表达式字符串
views视图函数参数:一个可调用的对象,通常为一个视图函数
参数:要传递给视图函数的默认参数(字典形式)
别名:一个可选的name参数
URL 向后台传值:
URL:
#把[0-9]{4} 用小括号括起来后台可以直接获取值 re_path(r'^articles/([0-9]{4})/$',views.year_archive),
后台:
def year_archive(req,year): return HttpResponse("year:"+year)
将值重命名后传递到后台:
URL :
#?P<year> 是将后边的结果命名为year,类似于 year= [0-9]{4}的结果 , 重命名之后,后端接收参数的名字要与重命名的名字相同 re_path(r'^articles/(?P<year>[0-9]{4})/',views.year_archive2),
后台:
def year_archive2(req,year): return HttpResponse("year 2:"+year)
将URL 进行重命名
url:
path("name/",views.name,name="xiaoxiao"),
HTML 页面访问 这个url(action={% url "xiaoxiao" %}):
<form action={% url "xiaoxiao" %} method="post"> <input type="text" name="user"> <input type="password" name="pwd"> <input type="submit" value="submit"></input> </form>
URL 映射分发:
当一个网站过大的时候,会有多个url , 可以把url分发到指定的模块中去处理。比如51cto 有博客,视频 等模块,我们可以在博客中定义处理博客URL 的文件, 防止总的URL 文件过大以及URL 相互干扰。
配置如下:
总的URL 文件:
from django.contrib import admin from django.urls import path,re_path from blog import views from django.conf.urls import url,include urlpatterns = [ url(r'^blog/',include('blog.urls')), ]
这段代码的意思是拦截以 “blog/” 开头的URL, 将这个URL 分配到 blog.urls 中。
blog.urls 文件
from django.contrib import admin from django.urls import path,re_path from blog import views from django.conf.urls import url,include urlpatterns = [ url(r'^news/story',views.introduce), ]
这段代码的意思是拦截/news/story 这样的url
当请求路径为 http://127.0.0.1:8000/blog/news/story 的时候就会调用这个URL,达到了url 分发的作用。