django基础之urls详解

urls基本配置

urls 配置类似于网站的目录,通过 urls 的配置,告诉 Django 对于该 url 调用哪段代码。基本的语法格式

1
2
3
 urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]

  • 正则表达式 正则表达式字符串
  • 视图函数 可调用的对象,通常是视图函数或一个指定视图函数路径的字符串
  • 参数 可选的要传递给视图函数的默认参数
  • 别名 可选的name参数

正则字符串参数

配置实例

1
2
3
4
5
6
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
  1. 一旦匹配成功,则不再继续
  2. 若要从 url 中捕获一个值,只需要在它的周围放一对圆括号
  3. 不需要添加一个前置的反斜杠,例如,应该是 ^articles 而不是 ^/articles,因为每一个都会有
  4. 每个表达式前面的 r 建议都添加,正则表达式的用法
  5. 是否开启 url 访问地址后面不带 / 跳转为带有 / 的路径,APPEND_SLASH=True

include 其他urls

当主 urls 中有很多匹配路由时,会比较杂乱,建议根据项目中的应用,使用 include 参数,分配到各项目的 urls 文件中。
对于 Djangotest 项目, demo01 应用
Djangotest/urls.py

1
2
3
4
5
6
7
8
9
from django.conf.urls import url,include
from django.contrib import admin
from demo import views

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/$', views.login),
url(r'^api/', include('demo01.urls')), # include使用方法
]

demo01/urls.py

1
2
3
4
5
6
7
8
9
from django.conf.urls import url
from demo01 import views

urlpatterns = [
url(r'^list.html', views.list),
url(r'^add.html', views.add),
url(r'^update.html', views.update),
url(r'^delete.html', views.delete),
]

此时访问地址为 http://127.0.0.1:8000/api/list.html,将会匹配到 demo01 的 urls 文件。

参数传递

当需要捕获 url 中传递的参数时候,可以采用如下的方式
demo01/urls.py

1
2
3
4
5
6
7
8
9
from django.conf.urls import url
from demo01 import views

urlpatterns = [
url(r'^list.html', views.list),
url(r'^add.html', views.add),
url(r'^(?P<num>[0-9]+)/update.html', views.update), # 正则匹配,参数num
url(r'^delete.html', views.delete),
]

/demo01/views.py

1
2
3
def update(requests, num):
print(num)
return HttpResponse('this update')

此处使用 num就可以直接接受到参数。
另外,此处传递的参数都是字符串,不论传递的是数字还是字符串。

Recommended Posts