django入门(八)自定义Tag
阅读别人的中文笔记
http://www.woodpecker.org.cn/obp/django/django-stepbystep/newtest/doc/
step by step(十五)i18n的一些东东,先略过吧。
step by step(十六)
1.Tag执行过程
作者描述的Tag执行过程,如果要自定义 Tag ,那么要了解 Tag 的处理过程。在 Django 中, Tag 的处理分为两步。
1.编译。即把 Tag 编译为一系列的 django.template.Node 结点。
2.渲染(Render)。即对每个 Node 调用它们的 render() 方法,然后将输出结果拼接起来。
2.下载对应的资源
下载地址如下:
http://py-templates.sourceforge.net/
其中我们要用到的是:
HTMLTemplate http://py-templates.sourceforge.net/htmltemplate/index.html
HTMLCalendar http://py-templates.sourceforge.net/htmlcalendar/index.html
下载得到的文件,我们都切换到root用户,然后揭开压缩:
tar zxvf 文件名
然后切换到文件夹中,用如下命令来安装:
python setup.py install
3.创建my_calendar应用,并新建py文件
python manage.py startapp my_calendar
/my_calendar/templatetags/__init__.py
/my_calendar/templatetags/my_calendar.py
my_calendar.py文件的内容如下:
from django import template
register = template.Library()
class CalendarNode(template.Node):
def __init__(self):
pass
def render(self, context):
return "Calendar"
def do_calendar(parser, token):
return CalendarNode()
register.tag('calendar', do_calendar)
4.新建html模板文件
/template/my_calendar/calendar.html,内容如下:
{% load my_calendar %}
{% calendar 2010 2 %}
5.修改urls.py映射和settings.py增加这个模块:
(r'^calendar/$', 'django.views.generic.simple.direct_to_template',{'template': 'my_calendar/calendar.html'}),
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'easydjango.wiki',
'easydjango.address',
'easydjango.ajax',
'easydjango.my_calendar',
)
6.启动服务后,访问地址http://localhost:8000/calendar/,能看到
Calendar
这个目前只是测试了,能调用到我们自定义的tag,但是没有什么意义,应为没有对输入输出进行处理。
修改my_calendar.py文件,对这些进行处理
from django import template
import HTMLCalendar
register = template.Library()
class CalendarNode(template.Node):
def __init__(self, year, mon):
self.year = int(year)
self.mon = int(mon)
def render(self, context):
return HTMLCalendar.MonthCal().render(self.year, self.mon)
def do_calendar(parser, token):
try:
print token.contents
tag_name, arg = token.contents.split(None, 1)
except ValueError:
#if no args then using current date
import datetime
today = datetime.date.today()
year, mon = today.year, today.mon
else:
try:
year, mon = arg.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires year and mon arguments" % tag_name
return CalendarNode(year, mon)
register.tag('calendar', do_calendar)
刷新刚才的测试页面,能看到如下的结果:
February
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28
step by step(十七)
笔记的原作者,对各个模块的理解:
View ----->Template------>Tag
这个简单笔记到了这里就看完了,下一部考虑看一边英文原文的文档,另外考虑做个简单的python应用
放到google app上。
分享到:
相关推荐
django入门与实践
前言Django入门与实践-第1章:环境搭建- 6 -所以,请动起手来!不要只是阅读教程。我们一起来练习!通过实践和练习你会收获的更多。Django是一个用py
主要介绍了django rest framework 自定义返回方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
本文档为Django入门知识,其中详细的讲解了如何搭建第一个Django程序。
主要介绍了Django实现的自定义访问日志模块,结合具体实例形式分析了Django针对日志的相关操作技巧,需要的朋友可以参考下
最简单的Django教程,有项目在里面,高清大图,快速上手项目!
Python-&-DJango入门教程[原创]全文共18页,当前为第1页。Python-&-DJango入门教程[原创]全文共18页,当前为第1页。网民原创 Python-&-DJango入门教程[原创]全文共18页,当前为第1页。 Python-&-DJango入门教程[原创...
python 基础入门源码,django框架学习,基础源码,用于初学者读
python中用django框架做的一个简单的入门实例-对用户信息的增删改
Python——django入门教程
实现Django后台页面自定义、搜索功能(基于日期单搜索和日期项目名称多选项搜索)、数据显示(BootstrapTable翻页)、权限(控制表),同时优化输入框联想功能,希望对你有用。
Django入门新闻管理系统。入门的,新手可以看下哈。。。 ================================================== Django的环境: Python的安装: python-2.7.1.msi Django的安装: 去djangoproject.com下载最新的版本...
主要介绍了django admin 添加自定义链接方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Django入门基础教程:django模板 Django入门基础教程:django模板
django-admin-customizer Django admin 自定义界面特征同一模型的多个管理实例定制: 列表显示列表过滤器raw_id_fields 搜索字段去做动作配置器基础管理类支持要求Django 1.3、1.4、1.5、1.6。 不支持 Django 1.2 或...
最近工作开发主要利用Django搭建公司后台系统,在开发中遇到数据分页(django原生翻页),后台自定义页面、搜索功能(基于日期单搜索和日期项目名称多选项搜索)、数据显示(BootstrapTable翻页)、权限(控制表)等...
Django入门之CMDB系统,高清完整版。
。。。
Django实战