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. linux下使用crontab定时执行脚本

    使用crontab定时执行脚本 cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务: crontab –e : 修改 crontab 文件,如果文件不存在会自 ...

  2. [LeetCode] Longest Line of Consecutive One in Matrix 矩阵中最长的连续1

    Given a 01 matrix M, find the longest line of consecutive one in the matrix. The line could be horiz ...

  3. 【django之Ajax】

    一.Ajax的简介 1.定义 AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML",是一种创建交互式网页应用 ...

  4. spring初学总结思路

    spring初步学习总结 总概括有四个方面:IOC,AOP,JDBC,和事务管理 ioc:实现了new类的一个权力的反转.(平时new类导致代码冗余,手动new类无法满足动态new类的需求) aop: ...

  5. 阿里云在RSAC 2018上宣布 将在西雅图建立安全实验室

    日前,2018年度的RSA Conference全球信息安全大会在美国加州旧金山市召开.作为全球三大云计算服务商之一,阿里云携3款全新安全产品亮相,并宣布今年将在西雅图设立全新的安全实验室,整合全球安 ...

  6. 对于IO流的个人理解

    Samuel 2018-04-21 在这之前,我给你们构造这样一个生活用水的场景: 人们日常生活需要生活用水,那么,水从哪里来呢? 大家都学过初中的物理常识,水在地表,通过蒸发,变成水蒸气去到空中,在 ...

  7. BZOJ4894 天赋

    Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有 一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在 ...

  8. 例10-7 uva10820(欧拉)

    题意:输入n,要求满足1≤x,y≤n,且x,y互素的个数. 若输入2,则答案3为(1,1),(1,2),(2,1);所以欧拉函数求出所有数的phi值,除了1之外都加上phi值的2倍即可 通过推导: p ...

  9. bzoj1073[SCOI2007]kshort

    1073: [SCOI2007]kshort Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1483  Solved: 373[Submit][Sta ...

  10. Python作业之三次登陆锁定用户

    作业之三次登陆锁定用户 作业要求如下: 1. 输入用户名和密码 2. 认证成功提示欢迎信息 3. 认证失败三次锁定用户 具体代码如下: 方法1: import os#导入os模块 if os.path ...