本文实例讲述了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,如下所示:
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参数映射使得开发者可以定义这些被传递参数的参数名称,方式为"",如下所示:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^year/2015/$', views.moments_2015), url(r'^year/"htmlcode">year_moments(request,year=xxxx)和month_moments(request,year=xxxx,month=xx)!3.分布式URL映射
在django项目中,可能包含多个应用,每个app都有自己urls.py,如果将所有的url映射都放在一个urls.py文件不利于维护。Django通过include()函数提供了分布式URL映射功能。
在项目根映射文件urls.py引用其他应用的映射文件:
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:
from django.conf.urls import url, include from . import views urlpatterns = [ url(r'^year/"color: #0000ff">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()函数。
from django.conf.urls import url, include urlpatterns = [ url(r'^year/2015/$', views.year_moments, name="moments_2015"), ]定义一个URL映射,通过name参数将该映射命名为moments_2015.在需要获取该URL的模板文件中{%url%}标签来进行声明:
<a href="{% url 'moments_2015'%}" rel="external nofollow" > 查看2015消息 </a>上面用'moments_2015'映射名作为反向解析的参数,解析结果为:
<a href="/year/2015/" rel="external nofollow" rel="external nofollow" > 查看2015消息 </a>在视图函数中调用方式是reverse函数。如下所示:
#views.py from django.urls import reverse from django.http import HTTPResponseRedirect def redirect_to_year_2015(request): return HTTPResponseRedirect(reverse('moments_2015'))5.反向解析带参数
模板文件如下所示:
from django.conf.urls import url, include urlpatterns = [ url(r'^year/"moments"), ]模板文件通过{%url%}标签调用反向解析:
<a href="{% url 'moments', 2015%}" rel="external nofollow" > 查看2015消息 </a>上面用'moments_2015'映射名作为反向解析的参数,解析结果为:
<a href="/year/2015/" rel="external nofollow" rel="external nofollow" > 查看2015消息 </a>python视图函数调用reverse进行反向解析:
#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程序设计有所帮助。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]