Django框架视图层URL映射与反向解析实例分析

  

本文实例讲述了Django框架视图层URL映射与反向解析。分享给大家供大家参考,具体如下:

  

Django视图层主要工作就是衔接HTTP请求,python程序,HTML模板。

  

URL分发(URL调度员)映射配置可以被看作Django项目的入口配置(项目下的urls . py以及应用的下的urls . py,包括将两者联系起来在项目下的urls . py),通过URLdispatcher可以指定用户的每一个访问的后台的python处理函数是什么。

  

  Django

每一个都有一个url。py来维护URL调度程序,如下所示:

        从django.conf。url输入url   从。导入视图#导入视图处理函数   urlpattern=[   url (r ^年/2015/$,views.moments_2015),   url (r ^年/([0 - 9]{4}$)”,views.years_moments),   url (r ' ^月/([0 - 9]{4})/([0 - 9]{2}$),views.month_moments),   url (r 'month/([0 - 9]{4})/([0 - 9]{2})/([0 - 9] +)的美元,views.test),   ]      之前      

该文件通过维护urlpattern列表的元素完成URL映射,每个元素都是django.conf.urls.url的一个实例,URL的第一个参数是HTPP路径,第二个是相应的python函数名。

  

URL路径用正则表达式表达,“^”起始符,“美元”结束符,第一个路径是严格路径,只匹配/2015年,调用是的观点中moment_2015(请求)函数,要求是用户请求对象!

  

第二个路径匹配的事任何年/xxxx的路径,其中xxxx代表是四个数字,调用视图的year_moment(请求,xxxx),并且会把四个数字当成变量传给该函数

  

第三个第四个与第二个类似,只不过后续添加了更多路径变量调用函数分别为month_moments(请求、xxxx yy)和测试(请求、xxxx yy, zz)

  

  

命名URL参数映射使得开发者可以定义这些被传递参数的参数名称,方式为“& # 63;术中;name>模式”,如下所示:

        从django.conf。url输入url   从。进口的观点   urlpattern=[   url (r ^年/2015/$,views.moments_2015),   url (r '/^年& # 63;术中;year> ([0 - 9] {4} $), views.years_moments),   url (r '/^月& # 63;术中;year>([0 - 9]{4})/& # 63;术中;month> ([0 - 9] {2} $), views.month_moments),   ]      之前      

当多个URL映射定义可以匹配同一个URL访问,django会选取列表的第一个元素! ! ! ! ! ! ! ! ! !

  

后两个url使用命名参数进行定义,调用函数如下:

        year_moments(请求,年=xxxx)和month_moments(请求,年=xxxx,月=xx) !      之前      

  

在django项目中,可能包含多个应用,每个应用都有自己urls . py,如果将所有的url映射都放在一个urls . py文件不利于维护.Django通过包括()函数提供了分布式url映射功能。

  

在项目根映射文件urls . py引用其他应用的映射文件:

        从django.conf。url输入url,包括   urlpattern=[   url (r/^时刻,包括(djangosite.app.urls)),   url (r ^ admin/,包括(djangosite.admin.urls)),   ]      之前      

以时刻/开头的URL被转接到djangosite.app.urls.py文件

  

以admin/开头的URL被转接到djangosite.admin.urls.py文件

  

其中子映射文件app/urls . py:

        从django.conf。url输入url,包括   从。进口的观点   urlpattern=[   url (r '/^年& # 63;术中;year>([0 - 9]{4})/美元”,views.year_moments),   url (r ^ admin/,包括(djangosite.admin.urls)),   ]      之前      

解析URL:

  

第一个对的访问会定位到app/views.py的year_moments函数

  

第二个元素对的访问会转接到djangosite.admin.urls.py文件进行解析

  

  

django的反向解析共那个在模板文件和python视图函数:

  

在模板文件中用{% url %}标签调用反向解析;

  

在python视图函数中用django.urls.reverse()函数。

        从django.conf。url输入url,包括   urlpattern=[   url (r ^年/2015/$”的观点。year_moments name=" moments_2015 "),   ]      之前      

定义一个URL映射,通过名字参数将该映射命名为moments_2015。在需要获取该URL的模板文件中{% URL %}标签来进行声明:

        & lt; a href=" https://www.yisu.com/zixun/{% url 'moments_2015 ' %} " rel="外部nofollow”比;   查2015年看消息   & lt;/a>      之前      

上面用的moments_2015映射名作为反向解析的参数,解析结果为:

Django框架视图层URL映射与反向解析实例分析