Django 项目中 urls.py 为请求路径与视图函数的映射关系
一, 简单的路由配置
- from django.conf.urls import url,include
- from django.contrib import admin
- from app01 import views
- urlpatterns = [
- url(r'^$', views.index), # 匹配根路径
- url(r'^admin/', admin.site.urls),
- url(r'^articles/2003/$', views.special_case_2003), # special_case_2003(request)
- #无名分组
- url(r'^articles/(\d{4})/$', views.year_archive), # year_archive(request,2006)
- url(r'^articles/(\d{4})/(\d{2})/$', views.year_month_archive), # year_month_archive(request,2006,12)
- # 有名分组
- url(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.year_month_archive), # year_month_archive(request,year=2006,month=12)
- # 分发 include
- # url(r'^app01/', include('app01.urls')),
- # url(r'^app02/', include('app02.urls')),
- #起别名
- url(r'^login.html/', views.login,name="XXX"),
- ]
注意:
不需要添加一个前导的反斜杠, 因为每个 URL 都有. 例如, 应该是 ^articles 而不是 ^/articles.
示例:
'''
一些请求的例子:
/articles/2005/03/ 请求将匹配列表中的第三个模式. Django 将调用函数 views.month_archive(request, '2005', '03').
/articles/2005/3/ 不匹配任何 URL 模式, 因为列表中的第三个模式要求月份应该是两个数字.
/articles/2003/ 将匹配列表中的第一个模式不是第二个, 因为模式按顺序匹配, 第一个会首先测试是否匹配. 请像这样自由插入一些特殊的情况来探测匹配的次序.
/articles/2003 不匹配任何一个模式, 因为每个模式要求 URL 以一个反斜线结尾.
/articles/2003/03/03/ 将匹配最后一个模式. Django 将调用函数 views.article_detail(request, '2003', '03', '03').
'''
二, 反向解析
在使用 Django 项目时, 一个常见的需求是获得 URL 的最终形式, 以用于嵌入到生成的内容中 (视图中和显示给用户的 URL 等) 或者用于处理服务器端的导航 (重定向等). 人们强烈希望不要硬编码这些 URL(费力, 不可扩展且容易产生错误) 或者设计一种与 URLconf 毫不相关的专门的 URL 生成机制, 因为这样容易导致一定程度上产生过期的 URL.
在模板中: 使用 url 模板标签.
在 Python 代码中: 使用 from django.urls import reverse
在模板中:
- <form action="{% url'XXX'%}" method="post">
- 用户名 <input type="text" name="user">
- 密码 <input type="password" name="pwd">
- <input type="submit">
- </form>
在 python 中:
- from django.urls import reverse
- def delbook(request,delete_book_id):
- Book.objects.filter(nid=delete_book_id).delete()
- return redirect(reverse('books'))
当命名你的 URL 模式时, 请确保使用的名称不会与其它应用中名称冲突. 如果你的 URL 模式叫做 comment, 而另外一个应用中也有一个同样的名称, 当你在模板中使用这个名称的时候不能保证将插入哪个 URL. 在 URL 名称中加上一个前缀, 比如应用的名称, 将减少冲突的可能. 我们建议使用 myapp-comment 而不是 comment.
来源: http://www.bubuko.com/infodetail-2820515.html