上回说了url函数的用途和使用方法,它有效避免了模板Templates 中url硬编码的问题,是项目更好维护,接下来说permalink,也能更好的防止硬编码,而且也是比较隐含的函数,它比url函数更高级点。它在python的世界里是一个装饰器,短短几行代码,更为精炼:
def permalink(func):
from django.core.urlresolvers import reverse
def inner(*args, **kwargs):
bits = func(*args, **kwargs)
return reverse(bits[0], None, *bits[1:3])
return inner
它到底怎么用呢?举例子更好说明些,一个blog,通俗些是一篇文章。我想地址像这样:
panjj/Django/2010/03/09/28
地址是: 博主/类别/发表年份/发表月份/发表日期/博客ID/ ,看看地址就会发现地址的六个参数都是一篇博客里的字段。这时到
permalink发挥的时候了。
我们在urlpatterns定义博客的地址
urlpatterns = patterns('myproject.blog.views',
url(r'^(?P<username>\w+)/(?P<category>\w+)/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<id>\d+)$','blog',
name="blog" ),)
博客的实体类里 定义一个子方法:
@models.permalink
def get_absolute_url(self):
return ("blog", None, {
"username":self.user.username,
"category":self.category.slug,
"year": self.created_at.year,
"month": "%02d" % self.created_at.month,
"day": "%02d" % self.created_at.day,
"id": self.id
})
在模板Templates里 直接使用{%blog. get_absolute_url%} 解析出来的地址就是我们想要的了地址字符串:
panjj/Django/2010/03/09/28
urlpatterns定义的博客地址 使用到了url函数,这样我们在实体类子方法get_absolute_url里就能直接找到那个url函数(因为url函数指定了参数name,全站是唯一的)。get_absolute_url方法第一个参数,是对应urlpatterns定义的博客地址匹配url函数;第二个我们暂时不需要,设个None;第三个是一个字典,就是地址需要的六个参数:博主/类别/发表年份/发表月份/发表日期/博客ID/的值,他们在实体中都能取得到值的;注,参数名字和值 与urlpatterns定义博客地址的正则表达式要顺序一一对应,结果才能解析出地址来。
在模板Templates里使用某个博客的链接 这下子就简单多了,只要查到博客的一个实体,就能轻易得出相应博客的地址,而且去掉了url硬编码的毛病,urlpatterns定义的博客地址叫法如何改变也不会影响模板的写法。
开始的时候 说它比url更高级,是因为在以上的场合,使用permalink 在模板上解析地址比url函数要精简的多,如今天的博客例子在模板上你可能这么写:
{%url blog.user.username,blog.category,blog.created_at.year,blog.created_at.month,blog.created_at.day,blog.id%}
而有了permalink ,你就可以写成:
{%blog. get_absolute_url%}
了。
分享到:
相关推荐
Django开发的一个简单的员工管理系统源码 Django开发的一个简单的员工管理系统源码 Django开发的一个简单的员工管理系统源码 Django开发的一个简单的员工管理系统源码 Django开发的一个简单的员工管理系统...
使用python的django开发的一个商城项目源码 使用python的django开发的一个商城项目源码 使用python的django开发的一个商城项目源码 使用python的django开发的一个商城项目源码 使用python的django...
总的来说,Django是一个功能全面、易学易用的Web开发框架,适用于快速开发高质量的Web应用。通过学习和实践Django,开发者可以提升工作效率,同时享受到Python语言的优雅和强大。在实际项目中,Django提供的“开箱即...
在Django中,视图通常是一个Python函数或类方法。 3. **模板(Template)**:模板是HTML文件,其中包含Django模板语言(DTL)元素,用于动态生成HTML响应。DTL允许开发者插入变量、控制流和过滤器,以根据数据生成...
Django鼓励使用函数式视图和类视图,它们都需返回一个HttpResponse对象。 模板文件,如`templates`目录下的HTML文件,负责呈现数据。Django模板语言(DTL)提供了各种控制结构和过滤器,让开发者可以动态生成HTML...
通过shell在linux 下的bpython比较了几个函数的区别,让人更容易懂
【基于Django的一个记事本】是一个利用Python的高级Web框架Django开发的应用程序,它旨在提供一个简单易用的在线记事本功能。Django以其“ batteries included ”的理念著称,提供了完整的数据库管理、用户认证、...
Python基于Django框架实现的一个学生信息管理系统源码 Python基于Django框架实现的一个学生信息管理系统源码 Python基于Django框架实现的一个学生信息管理系统源码 Python基于...
Django:Django视图函数与URL配置教程.docx
在本文中,我们将深入探讨如何使用Django框架创建一个简单的"Hello, World!"应用程序。Django是Python编程语言中的一款强大、高效的Web开发框架,它遵循模型-视图-控制器(MVC)的设计模式,旨在简化网站的构建过程...
1. **创建Django项目和应用**:首先,我们需要创建一个新的Django项目,然后在项目中创建一个应用,比如命名为`scrapy_manager`。在这个应用中,我们将编写用于控制Scrapy爬虫的视图函数和模板。 2. **安装Scrapy和...
Python的Django框架是一个强大的Web开发工具,以其“快速、优美、可维护”著称。在本项目中,我们利用Django构建了一个功能完善的论坛,其中包括评论、回复、用户头像展示、排行榜、文章管理以及表单验证等多个关键...
Django是一个开源的Web应用框架,由Python写成。 Django Web框架还提供高级功能,例如ORM,数据库迁移,用户身份验证,管理面板和表单。 Django程序员喜欢该框架,因为它具有简化数据库工作的功能。它加快了开发过程...
在本项目中,我们利用Django这一强大的Python Web框架,构建了一个实际的音乐网站,它具有侧边栏的隐藏式音乐播放器功能,同时具备分页和批量处理能力,以及吸引人的界面导航设计。这个项目不需要数据库,可以直接...
标题 "django 写的一个小博客" 提示我们这是一个使用 Django 框架构建的个人博客项目。Django 是一个高级的 Python Web 框架,用于快速开发安全且可维护的网站。 描述中的 "django 写的一个小博客.urls 有点小问题...
另一个视图可能处理购票请求,验证用户输入、检查座位库存、生成订单等。 3. **模板(Templates)** 模板是HTML文件,包含Django模板语言,用于动态生成网页。在影院票务系统中,模板可能包括电影详情页、放映场次...
【标题】"django_Demo完结.zip"所代表的是一个基于Django框架开发的完整Web项目。这个项目已经打包成ZIP格式,便于用户下载和学习。它涵盖了从开发到部署的全过程,特别强调了使用Nginx和uWSGI在服务器上配置和运行...
在Django中,视图通常是一个函数或类,它们接收HTTP请求,根据请求内容进行处理,然后返回一个HTTP响应。 5. **模板(Templates)**: 模板系统允许我们编写动态HTML,可以包含变量和控制结构,如循环和条件语句。...
在本项目中,“基于Django完成一个企业级的官方网站的制作”是一个涵盖了多个技术领域的实践教程,主要聚焦于使用Python的Django框架构建一个高效、功能完备的企业网站。Django是一个高级的Web开发框架,它提供了...
Django是一个用Python语言编写的开源Web应用框架,它遵循Model-View-Controller(MVC)的设计模式。Django因其强大的功能和高效性,在Python Web开发领域占据着重要地位,被广泛应用于众多知名网站和应用程序的构建...