DJango内建模板转向jinja2的小脚本
import re,os def org(path=os.getcwd(),fs=None,preview=True):
fs = fs or []
for root,dirs,files in os.walk(path):
for f in files:
if f[-4:]=='html':
fp=os.path.join(root,f)
s=open(fp,encoding='u8').read()
for func in fs:
s=func(s,preview)
if not preview:
open(fp,'w',encoding='u8').write(s) url_kwargs_reg=re.compile(r"""
{%\s*url\s+
(?P<viewfunc>((?P<q1>['"]?)[\w:.]+(?P=q1)))
(?P<kwargs>(\s+\w+\s*=\s*(?P<q2>['"]?)[.\w]+(?P=q2))*)
\s*%}""",re.X) nv_reg=re.compile(r"""\s+
(?P<name>\w+)
\s*=\s*
(?P<value>(?P<q2>[\'"]?)[.\w]+(?P=q2))
""",re.X) def url_kwargs(text,preview=1):
for old,new in [
(m.group(),'{%% url(%s,kwargs=dict(%s)) %%}'%(
m.group('viewfunc'),
','.join(['%s=%s'%(n.group('name'),n.group('value')) for n in re.finditer(nv_reg,m.group('kwargs'))]),
)
)
for m in re.finditer(url_kwargs_reg,text)
]:
if preview:
print('%s--->\n %s'%(old,new))
else:
text=text.replace(old,new,1)
return text url_args_reg=re.compile(r"""
{%\s*url\s+
(?P<viewfunc>((?P<q1>['"]?)[\w:.]+(?P=q1)))
(?P<args>(\s+(?P<q2>['"]?)[.\w]+(?P=q2))*)
\s*%}""",re.X) def url_args(text,preview=1):
for old,new in [
(m.group(),'{%% url(%s,args=(%s,)) %%}'%(
m.group('viewfunc'),
','.join( m.group('args').split()),
)
)
for m in re.finditer(url_args_reg,text)
]:
if preview:
print('%s--->\n %s'%(old,new))
else:
text=text.replace(old,new,1)
return text if __name__=='__main__':
text="""
{% url viewname first =fir third= "thi" %}
{% url "viewname" first = fir%}
{% url 'viewname' first =fir second = 'sec' third ='thi' %}
{% url 'funcname' first second 'third' %}
{% url "funcname" first "third" %}
{% url funcname first%}
"""
fs=[url_args,url_kwargs]
org(fs=fs,preview=0)
DJango内建模板转向jinja2的小脚本的更多相关文章
- Django内建模版标签和过滤器
第四章列出了许多的常用内建模板标签和过滤器.然而,Django自带了更多的内建模板标签及过滤器.这章附录列出了截止到编写本书时,Django所包含的各个内建模板标签和过滤器,但是,新的标签是会被定期地 ...
- django 内建标签和过滤器参考
下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block ...
- Django内置模板标签
Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...
- 第三章:模版层 - 2:Django内置模板标签
Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...
- Django 内置模板标签和过滤器
一.内置模板标签 语法:{% %} autoescape : 是否转义,on或off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束 {% autoescape on % ...
- python3之Django内置模板标签和过滤器
一.模板标签 内置标签: 1.autoescape 控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束标签关闭. views: ...
- Django 内建 中间件组件
中间件 这篇文档介绍了Django自带的所有中间件组件. 要查看关于如何使用它们以及如何编写自己的中间件,请见中间件使用指导. 可用的中间件 缓存中间件 class UpdateCacheMiddle ...
- django模板 内建标签
autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} block 定义一个子模板可 ...
- 11:django 模板 内建标签
django 内建标签 autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} bl ...
随机推荐
- C#之winform实现文件拖拽功能
将一个文件拖拽到窗体的某个控件时,将该控件的路径显示在该控件上,只要拿到了路径自然可以读取文件中的内容了 将一个控件的属性AllowDrop设置为true,然后添加DragDrop.DragEnter ...
- [LeetCode] Maximum Product of Three Numbers 三个数字的最大乘积
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- [BJOI 2011]元素
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强 ...
- [NOI 2014]起床困难综合症
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- [HNOI2015]落忆枫音
题目描述 「恒逸,你相信灵魂的存在吗?」 郭恒逸和姚枫茜漫步在枫音乡的街道上.望着漫天飞舞的红枫,枫茜突然问出这样一个问题. 「相信吧.不然我们是什么,一团肉吗?要不是有灵魂......我们也不可能再 ...
- P2515 [HAOI2010]软件安装
树形背包 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...
- ●BZOJ 2006 NOI 2010 超级钢琴
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2006 题解: RMQ + 优先队列 (+ 前缀) 记得在一两个月前,一次考试考了这个题目的简 ...
- hdu 5724 SG+状态压缩
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- hdu 5131(2014 广州—模拟)
题意:给你n个人以及他们的杀人数.先按杀人数从大到小排名输出,然后是一些询问 一个人名,①输出杀人数比他大的人数和+1:②如果有人杀人数和他一样而且名字的字典序比他小,输出人数+1,没有则无视. #i ...
- hdu2795 线段树 贴广告
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...