Django框架视图层URL映射与反向解析实例分析
本文实例讲述了Django框架视图层URL映射与反向解析。分享给大家供大家参考,具体如下:
Django视图层主要工作就是衔接HTTP请求、python程序、HTML模板。
URL分发(URL dispatcher)映射配置可以被看作Django项目的入口配置(项目下的urls.py以及应用的下的urls.py,include将两者联系起来在项目下的urls.py),通过URLdispatcher可以指定用户的每一个访问的后台的python处理函数是什么。
1.普通url映射
每一个Django都有一个urls.py来维护URL dispatcher,如下所示:
1 2 3 4 5 6 7 8 | from django.conf.urls import url from . import views #导入视图处理函数 urlpatterns = [ url(r '^year/2015/$' , views.moments_2015), url(r '^year/([0-9]{4}$)' , views.years_moments), url(r '^month/([0-9]{4})/([0-9]{2}$)' , views.month_moments), url(r 'month/([0-9]{4})/([0-9]{2})/([0-9]+)$' , views.test), ] |
该文件通过维护urlpatterns列表的元素完成URL映射,每个元素都是django.conf.urls.url的一个实例,url的第一个参数是HTPP路径,第二个是相应的python函数名。
URL路径用正则表达式表达,'^'起始符,'$'结束符,第一个路径是严格路径,只匹配'year/2015',调用是的views中moment_2015(request)函数,request是用户请求对象!
第二个路径匹配的事任何'year/xxxx'路径,其中xxxx代表是四个数字,调用views的year_moment(request,xxxx),并且会把四个数字当成变量传给该函数
第三个第四个与第二个类似,只不过后续添加了更多路径变量调用函数分别为month_moments(request, xxxx, yy)和test(request,xxxx, yy, zz)
2.命名URL参数映射
命名URL参数映射使得开发者可以定义这些被传递参数的参数名称,方式为"?P<name>pattern",如下所示:
1 2 3 4 5 6 7 | from django.conf.urls import url from . import views urlpatterns = [ url(r '^year/2015/$' , views.moments_2015), url(r '^year/?P<year>([0-9]{4}$)' , views.years_moments), url(r '^month/?P<year>([0-9]{4})/?P<month>([0-9]{2}$)' , views.month_moments), ] |
当多个URL映射定义可以匹配同一个URL访问,django会选取列表的第一个元素!!!!!!!!!!
后两个url使用命名参数进行定义,调用函数如下:
3.分布式URL映射
在django项目中,可能包含多个应用,每个app都有自己urls.py,如果将所有的url映射都放在一个urls.py文件不利于维护。Django通过include()函数提供了分布式URL映射功能。
在项目根映射文件urls.py引用其他应用的映射文件:
1 2 3 4 5 | from django.conf.urls import url, include urlpatterns = [ url(r '^moments/' , include( 'djangosite.app.urls' )), url(r '^admin/' , include( 'djangosite.admin.urls' )), ] |
以moment/开头的URL被转接到djangosite.app.urls.py文件
以admin/开头的URL被转接到djangosite.admin.urls.py文件
其中子映射文件app/urls.py:
1 2 3 4 5 6 | from django.conf.urls import url, include from . import views urlpatterns = [ url(r '^year/?P<year>([0-9]{4})/$' , views.year_moments), url(r '^admin/' , include( 'djangosite.admin.urls' )), ] |
解析URL:
第一个对http://xxxxxxxxx/moments/year/2013的访问会定位到app/views.py的year_moments函数
第二个元素对http://xxxxxx/moments/admin的访问会转接到djangosite.admin.urls.py文件进行解析
4.反向解析
django的反向解析共那个在模板文件和python视图函数 :
在模板文件中用{%url%}标签调用反向解析;
在python视图函数中用django.urls.reverse()函数。
1 2 3 4 | from django.conf.urls import url, include urlpatterns = [ url(r '^year/2015/$' , views.year_moments, name = "moments_2015" ), ] |
定义一个URL映射,通过name参数将该映射命名为moments_2015.在需要获取该URL的模板文件中{%url%}标签来进行声明:
上面用'moments_2015'映射名作为反向解析的参数,解析结果为:
在视图函数中调用方式是reverse函数。如下所示:
1 2 3 4 5 | #views.py from django.urls import reverse from django.http import HTTPResponseRedirect def redirect_to_year_2015(request): return HTTPResponseRedirect(reverse( 'moments_2015' )) |
5.反向解析带参数
模板文件如下所示:
1 2 3 4 | from django.conf.urls import url, include urlpatterns = [ url(r '^year/?P<year>([0-9]{4})/$' , views.year_moments, name = "moments" ), ] |
模板文件通过{%url%}标签调用反向解析:
上面用'moments_2015'映射名作为反向解析的参数,解析结果为:
python视图函数调用reverse进行反向解析:
1 2 3 4 5 | #views.py from django.urls import reverse from django.http import HTTPResponseRedirect def redirect_to_year_2015(request): return HTTPResponseRedirect(reverse( 'moments' , args = ( 2014 ,))) |
args参数可以携带参数反向解析!
希望本文所述对大家基于Django框架的Python程序设计有所帮助。

微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
利用PyInstaller将python程序.py转为.exe的方法详解
这篇文章主要给大家介绍了利用PyInstaller将python程序.py转为.exe的方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。2017-05-05Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
这篇文章主要介绍了Python中使用PyQt5/PySide2编写一个极简的音乐播放器功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2020-02-02
最新评论