Django基础之urls.py详解

URL分发器(路由配置文件)

在settings的配置文件中,设置了顶层的urls的分发器

ROOT_URLCONF = 'test_django.urls' 

URL配置(URLconf)就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码。URL的加载是从配置文件中开始。

urlpatterns的两种配置形式:

没有前缀的情况,使用的列表(推荐方式)

from django.conf.urls import url
from test import views

urlpatterns = [
    url(r'^index/$', views.index),
]

有前缀的情况,使用patterns方法,过时的方法(Django1.9以前使用)

from django.conf.urls import url, patterns
from test import views

urlpatterns = patterns('',
(r'^index/$', views.index),
)

URL模式:

urlpatterns = [
url(正则表达式, view函数, 参数, 别名)
]

参数说明:

  • 一个正则表达式字符串。
  • 一个可调用对象,通常为一个视图函数或是一个元组/列表。
  • 可选的要传递给视图函数的默认参数(字典形式 url(r'^index/', views.index, {'num': 2016}))。在视图函数中的request后也要有这个字典的键(def index(request, num):)
  • 一个可选的name参数:结合模板方便管理

URL分发器,include函数

通常一个 URL 分发器对应一个 URL 配置模块,它可以包含多个URL模式,也可以包含多个其他URL分发器。通过这种包含结构设计,实现Django对URL的层级解析。

URL 分发器是 Django 实现 app 与项目解耦的关键。通常由 include 方法操作的 URL 配置模块,最终会被解释成为 URL 分发器。

示例:

项目下的urls.py:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [     
    url(r'^admin/',admin.site.urls),
    url(r'^app01/', include('app01.urls')),    # include()函数的正则表达式不要有$
]

应用下的urls.py:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^index/$', views.index_app01),
]

views.py:

def index_app01(request):
    return render(request, 'index_app01.html')

在浏览器的地址栏中输入:http://127.0.0.1:8000/app01/index/

 

为什么admin模块引入的时候没有使用include   url(r’^admin/‘,admin.site.urls)
urls本身是一个方法,不需要include。具体可以查看源码

URL常见写法示例,正则表达式

url(r'^$', views.index)
url(r'^index/\d{2}/$', views.index)
url(r'^article/(?P<year>\d{4})/$', views.article)
url(r'^article/(?P<year>\d{4})/(?P<month>\d{2}) /$', views.article)

 

posted @ 2018-01-30 13:45  流星之泪  阅读(1314)  评论(0)    收藏  举报