上回说了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开发的一个简单的员工管理系统...
前端vue+后端django的一个分享交流平台源码 前端vue+后端django的一个分享交流平台源码 前端vue+后端django的一个分享交流平台源码 前端vue+后端django的一个分享交流平台源码 前端vue+后端django的一个分享...
python Django第一个程序
用Django写的一个简单的OA办公系统源码 用Django写的一个简单的OA办公系统源码 用Django写的一个简单的OA办公系统源码 用Django写的一个简单的OA办公系统源码 用Django写的一个简单的OA办公系统源码 用...
使用python的django开发的一个商城项目源码 使用python的django开发的一个商城项目源码 使用python的django开发的一个商城项目源码 使用python的django开发的一个商城项目源码 使用python的django...
使用Django编写一个书城电商网站,配合详细的教程
基于python的web框架django开发的一个统计论文发表的系统源码 基于python的web框架django开发的一个统计论文发表的系统源码 基于python的web框架django开发的一个统计论文发表的系统源码 基于python的web框架...
Python + Django 搭建的一个生鲜店源码 Python + Django 搭建的一个生鲜店源码 Python + Django 搭建的一个生鲜店源码 Python + Django 搭建的一个生鲜店源码 Python + Django 搭建的一个生鲜店源码 Python + ...
通过shell在linux 下的bpython比较了几个函数的区别,让人更容易懂
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。
Python基于Django框架实现的一个学生信息管理系统源码 Python基于Django框架实现的一个学生信息管理系统源码 Python基于Django框架实现的一个学生信息管理系统源码 Python基于...
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。
使用django实现的一个图书管理系统,可以进行借书,还书,后台登录,多用户借书功能。 使用django实现的一个图书管理系统,可以进行借书,还书,后台登录,多用户借书功能。 使用django实现的一个...
Django是一个开源的Web应用框架,由Python写成。 Django Web框架还提供高级功能,例如ORM,数据库迁移,用户身份验证,管理面板和表单。 Django程序员喜欢该框架,因为它具有简化数据库工作的功能。它加快了开发过程...
基于重型框架Django开发的一个简单记事本,前端使用boostorp.
django-easy-audit, 另一个 Django 审计日志程序,希望最简单的 django-easy-audit另一个 Django 审计日志程序,希望是最简单的。这个应用允许你跟踪你的用户所采取的行动。快速入门通过运行 pip install django-...
django-bulk-update, 在 Django ORM上使用一个查询进行批量更新 django-bulk-update 简单批量更新 Django ORM或者 helper 函数。这个项目旨在批量更新给定的对象,使用英镑的一个查询 Django 。安装pip install ...
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑...
一个用Python + Django开发的学生管理系统源码 一个用Python + Django开发的学生管理系统源码 一个用Python + Django开发的学生管理系统源码 一个用Python + Django开发的学生管理系统源码 一个用Python + ...
写你的第一个Django应用.pdf写你的第一个Django应用.pdf