django 自定义标签,django urlpatterns

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: