django 自定义标签,django urlpatterns
期初用django开发应用时,配置地址在urls.py中是完全硬编码的,HttpResponseRedirect()在views.py中也是硬编码的,当然在template中也是一样,这就带来了一个问题。如果在urls.py中修改了页面的地址,那么所有的位置(views.py和template)都必须修改。如果是大项目,需要修改的地方很多。当然,你也可以选择一个工具来直接找到替代品。除此之外呢?
其实django本身就提供了这个功能,也就是url标签。这个功能是通过使用django的url标签实现的。在本模块中:django/conf/urls/defaults
使用url标签后,无论urlpatterns中的地址名称如何更改,模板中的地址都不需要修改。当调用模板中的url标记时,您需要:{% load url from future %}
例如,当不使用url功能时:
Urlpatterns定义了信息的家庭地址,
urlpatterns=patterns(,
(r^article$,news_index),
)模板中的html是
A href=/article 信息/a
并且不止一个页面,可能有许多页面使用指向信息的链接。这时,你的模板上会有很多page A标签。当有一天,你突然想改变地址的名字,
urlpatterns=patterns(,
(r^news$,news_index),
)你会发现你要在模板里把10条a href=/article 信息/a修改成a href=/news 信息/a。
可恨的是,这样的标签分布在不同的页面上。更糟糕的是,你不知道这样的A标签有多少个(不可能总是一个数)。
有了url,情况就大不相同了,
Urlpatterns定义了信息的家庭地址,
urlpatterns=patterns(,
url(r^article$,news_index,name=新闻索引),
)模板中的html是
A href={%url news_index%} 信息/a如何修改urlpatterns的地址?模板会省去很多修改的麻烦。
url的用法也很简单,在urlpatterns中使用并附加一个名称即可,比如:
模板中使用的Url (r article $ , news _ index ,name= news _ index )。
可以使用{%url name%}地址链接。注意名称是全局的,在整个urlpatterns中只能有一个唯一的名称。这个道理应该很好理解,就像一个网站的地址是唯一的一样。
模板很容易使用,但是如何在视图中使用它呢?以前没有使用url函数的时候,可能会指向一个地址。
HttpResponseRedirect(/article )
当然,当urlpatterns更改地址名称时,所用视图的指向函数的参数也必须相应地更改。使用url函数,它变成:
HttpResponseRedirect(reverse( news _ index ))
好处和模板中使用的一样。
当urlpatterns地址包含参数时,例如:
(r^(?P year \d{4})/(?P month \d{1,2})/$ , news_list ),带两个参数,最后一个地址是存档地址http://www.yihaomen.com/2010/02.
情况变得复杂了,urlpatterns的上述用法保持不变:
url(r^(?P year \d{4})/(?P month \ d {1,2})/$ , news _ list ,name= news _ archive ),模板中的用法需要更改。我们把url当成一个方法,结合模板的语法,结果出来了:
a href= { % URL news _ archive 2010 02% } 2010年2月/a
或者这样:
a href= { % URL news _ archive year=2010 month=02% } 2010年2月/a当然,在您的背景视图. py中的方法上也必须有这两个参数,例如
定义新闻_列表(请求,年,月):
打印“年份:”,年份
打印“monty:”月份
.后面的2010,02是参数,参数之间用逗号隔开。有多少参数是以同样的方式使用的。当然2010 02参数是一个实体得到的,具体情况具体分析。而且在视图中,参数怎么写永远不会变。
从django.core.urlresolvers反向导入
.
Reverse (news _ archive ,kwargs={year: 2010, month: 02})例如:return httpresponse redirect(reverse( news _ archive ,kwargs={year: 2010, month: 02})
即最终解析的地址是“/2010/02”。
由此可以看出,用django开发应用时,url标签是一个非常灵活的东西,应该可以有多种用途,为以后的维护带来方便。
涉及
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。