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的小脚本的更多相关文章

  1. Django内建模版标签和过滤器

    第四章列出了许多的常用内建模板标签和过滤器.然而,Django自带了更多的内建模板标签及过滤器.这章附录列出了截止到编写本书时,Django所包含的各个内建模板标签和过滤器,但是,新的标签是会被定期地 ...

  2. django 内建标签和过滤器参考

    下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block ...

  3. Django内置模板标签

    Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...

  4. 第三章:模版层 - 2:Django内置模板标签

    Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...

  5. Django 内置模板标签和过滤器

    一.内置模板标签 语法:{%  %} autoescape : 是否转义,on或off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束 {% autoescape on % ...

  6. python3之Django内置模板标签和过滤器

    一.模板标签 内置标签: 1.autoescape 控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束标签关闭. views: ...

  7. Django 内建 中间件组件

    中间件 这篇文档介绍了Django自带的所有中间件组件. 要查看关于如何使用它们以及如何编写自己的中间件,请见中间件使用指导. 可用的中间件 缓存中间件 class UpdateCacheMiddle ...

  8. django模板 内建标签

    autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} block 定义一个子模板可 ...

  9. 11:django 模板 内建标签

    django 内建标签 autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} bl ...

随机推荐

  1. 重拾Python(4):Pandas之DataFrame对象的使用

    Pandas有两大数据结构:Series和DataFrame,之前已对Series对象进行了介绍(链接),本文主要对DataFrame对象的常用用法进行总结梳理. 约定: import pandas ...

  2. 以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)

    本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的技巧,技巧我讲,公司你选,两厢便利. 毕 ...

  3. [HNOI 2016]树

    Description 题库链接 给你一棵 \(N\) 个节点根节点为 \(1\) 的有根树,结点的编号为 \(1\sim N\) :我们称这颗树为模板树.需要通过这棵模板树来构建一颗大树.构建过程如 ...

  4. [SDOI2016]排列计数

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  5. UVA - 11107:Life Forms

    后缀数组height+二分 #include<cstdio> #include<cstdlib> #include<algorithm> #include<c ...

  6. UVA - 11468:Substring

    随机生成一个字符可以看成在AC自动机里面向前走一个节点,那么ans就是0向前走L步并且不经过单词节点, 由概率知识可得,f[p][L]=∑f[nxt[p][i]][L-1]*g[i] 其中p表示位于p ...

  7. hdu 5885 FFT

    XM Reserves Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)T ...

  8. hdu 5274 树链剖分

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  9. 【POJ 1459 power network】

    不可以理解的是,测评站上的0ms是怎么搞出来的. 这一题在建立超级源点和超级汇点后就变得温和可爱了.其实它本身就温和可爱.对比了能够找到的题解: (1)艾德蒙·卡普算法(2)迪尼克算法(3)改进版艾德 ...

  10. hdu 3433 A Task Process 二分+dp

    A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...