Django urls

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 分发的作用。

 

posted on 2018-04-09 11:22  gaizhongfeng  阅读(116)  评论(0编辑  收藏  举报