`
xiaolin0199
  • 浏览: 573206 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Django一个比较隐含的函数url[转]

阅读更多

Django下有一个比较隐含的函数url,在django/conf/urls/defaults模块中,虽然只有短短的10行代码,但功能却很了得。起初初学Django,并没有发现它,Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址改变了叫法,那眼泪可是哗哗的,有多少的拼凑的地址就得改动多少处!这时发现了url函数,这下可都好了,不管urlpatterns里的某个地址叫法怎么改变,Templates里的地址都不用修改了。
比如没有采用url函数的时候:
urlpatterns里定义了资讯的首页地址,
urlpatterns = patterns('',
(r'^article$','news_index' ),
)
Templates里的html为
<a href="/article">资讯</a>
而且不止一个页面,可能有10个页面使用到资讯的链接,这时你的Templates上就会有10个那样的页面a标签,当有一天,你突然想改变地址的叫法,
urlpatterns = patterns('',
(r'^news$','news_index' ),
)
你会发现,你在Templates中得修改10个
<a href="/article">资讯</a>

<a href="/news">资讯</a>
可恨的是那样的标签分布在不同的页面上,
有更糟糕的时候就是 你不知道到底有多少个那样的a标签(总不能一个个数嘛)。

有了url情况就大为不一样了,
urlpatterns里定义了资讯的首页地址,
urlpatterns = patterns('',
url(r'^article$','news_index' ,name="news_index"),
)
Templates里的html为
<a href="{%url news_index%}">资讯</a>
你怎么修改urlpatterns的地址,Template都会随着改变,省事了不少。

url的用法也很简单,只要在urlpatterns里使用它,附加一个name,如:
url(r'^article$','news_index' ,name="news_index"),
Templates里 这样使用
{%url name%},
地址链接就能使用了。注意的是name是全局的,你整个urlpatterns里只能一个唯一的name,这个道理应该好理解,就像网站的地址也是唯一性的。
Templates里的用法简单,在views里怎么用呢?以前在没有使用的url函数的时候,可能指向一个地址使用
HttpResponseRedirect("/article")
当然urlpatterns改变地址叫法的时候,所用的views的指向函数的参数都得跟着变。有了url函数,变成:
HttpResponseRedirect(reverse("news_index"))
好处和Template里使用的情形一样的。

当遇到urlpatterns的地址包含有参数的时候,如:
(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$','news_list' ),
有两个参数,最终的地址如归档的地址http://www.baoyalv.com/2010/02
情况变复杂点了,urlpatterns的以上的用法不变:
url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$','news_list',name="news_archive" ),
Templates里的用法就需要改改了,我们把url看成一个方法,结合templates的语法,结果就出来了:
<a href="{%url news_archive 2010 ,02%}">2010年02月</a>
后面的2010, 02 就是参数了,参数之间用逗号隔开,多少个参数用法都一样的。当然,2010 02 参数是某个实体获得的,具体的情况具体分析。而在views呢,有了参数怎么写,万变不离宗:
reverse("news_archive",kwargs={"year":2010,"month":02})
即可,最后解析出来的地址为“/2010/02”。

分享到:
评论

相关推荐

    Django:Django视图函数与URL配置教程.docx

    Django:Django视图函数与URL配置教程.docx

    利用django自带的routers实现对url路由的分发

    在Django框架中,URL路由是连接用户请求与视图函数的关键部分,它负责解析URL并调用相应的处理函数。Django自带的`routers`模块是为了解决大规模项目中URL路由管理的问题,它提供了自动化的方式来管理和生成URL模式...

    使用DJANGO框架的URL缩短器.zip

    使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器使用DJANGO框架的URL缩短器...

    Django 反向生成url实例详解

    3. 在视图中使用get_absolute_url方法:这个方法是定义在Django模型类中的一个方法,用于返回一个对象的URL。这是一种面向对象的反向URL查找方式,开发者只需要在模型类中重写这个方法即可。 文章中通过实例代码...

    django开发完美博客

    总结来说,"django开发完美博客"项目展示了如何利用Django框架搭建一个功能完善的博客系统,涵盖了从数据模型设计、视图逻辑实现、模板渲染、URL路由到用户认证等多个关键方面。通过学习这个项目,开发者不仅可以...

    django中的路径函数

    通过shell在linux 下的bpython比较了几个函数的区别,让人更容易懂

    Django是一个开放源代码的Web应用框架

    总的来说,Django是一个功能全面、易学易用的Web开发框架,适用于快速开发高质量的Web应用。通过学习和实践Django,开发者可以提升工作效率,同时享受到Python语言的优雅和强大。在实际项目中,Django提供的“开箱即...

    django-macros-url, Django 宏的URL路由必须尽可能简单.zip

    django-macros-url, Django 宏的URL路由必须尽可能简单 Django MACROS URL v0.4.0路由必须尽可能简单Django MACROS URL使得使用 MACROS 可以以轻松地在 Django 应用程序中编写( 阅读) URL模式。例如可以将前缀与宏名...

    django+scrapy结合

    1. **创建Django项目和应用**:首先,我们需要创建一个新的Django项目,然后在项目中创建一个应用,比如命名为`scrapy_manager`。在这个应用中,我们将编写用于控制Scrapy爬虫的视图函数和模板。 2. **安装Scrapy和...

    基于Django的一个记事本

    【基于Django的一个记事本】是一个利用Python的高级Web框架Django开发的应用程序,它旨在提供一个简单易用的在线记事本功能。Django以其“ batteries included ”的理念著称,提供了完整的数据库管理、用户认证、...

    django笔记 django笔记

    在Django中,视图通常是一个函数或类,它们接收HTTP请求,根据请求内容进行处理,然后返回一个HTTP响应。 5. **模板(Templates)**: 模板系统允许我们编写动态HTML,可以包含变量和控制结构,如循环和条件语句。...

    Django10个使用技巧

    Django是一个高效的Python web框架,以其遵循DRY(Don't Repeat Yourself)原则和高度可重用组件而闻名。以下是从标题和描述中提取的10个Django使用技巧,这些技巧可以帮助开发者更高效地使用Django进行开发。 1. *...

    Django框架基础教程(一):简单介绍PythonDjango框架.pdf

    Django是一个用Python语言编写的开源Web应用框架,它遵循Model-View-Controller(MVC)的设计模式。Django因其强大的功能和高效性,在Python Web开发领域占据着重要地位,被广泛应用于众多知名网站和应用程序的构建...

    django 写的一个小博客

    每个 URL 均应有一个对应的正则表达式和视图函数/类,通过 urlpatterns 列表进行配置。 3. **视图(View)**: 视图是处理请求并返回响应的部分。它可以是 Python 函数或类,负责从数据库获取数据,处理逻辑,然后将...

    django4中文文档

    Django提供一个基于正则表达式的URL分发器,开发者可灵活地编写URL Django内置了一个后台数据管理系统,经简单配置后,再编写少量代码即可使用完整的后台管理功能。 强大的缓存支持。Django内置了一个缓存框架,并...

    Python-一个Django模板用于使用Flask作为前端Django作为后端

    这个名为"flango-master"的压缩包文件提供了一个独特的方案,它结合了Python的两个流行框架——Django和Flask,创建了一个后端由Django驱动、前端由Flask呈现的混合应用模式。这样的设计允许开发者充分利用Django的...

    Python中django学习心得

    随着Django项目规模的增长,可能会出现多个应用共享同一个项目的场景。为了更好地组织代码,可以将每个应用的URL配置分别放置在各自的`urls.py`文件中,然后在主`urls.py`文件中通过`include()`函数将它们合并进来。...

    Django框架之登录后自定义跳转页面的实现方法

    自己尝试了一下,发现一个问题,当验证登陆成功后,页面会自动跳转到/account/profile,我并不想把页面跳转到这个页面,如何修改呢? 查了一堆网页,还是官网靠谱,很简单,就在project的setting里加一句话就Okay! ...

Global site tag (gtag.js) - Google Analytics