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 ...
随机推荐
- php文件包含漏洞(input与filter)
php://input php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置.php:/ ...
- 再深刻理解下web3.js中estimateGas如何计算智能合约消耗的gas量
我们可使用web3.js框架的estimateGas函数获得一个以太坊智能合约的Gas估计值 ,通过执行一个消息调用或交易,该消息调用或交易直接在节点的VM中执行,并未在区块链中确认,函数会返回估算使 ...
- hdu 4267 线段树间隔更新
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- hdu 1754 线段树(Max+单点修改)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- [bzoj4828][Ah/Hnoi2017]大佬
来自FallDream的博客,未经允许,请勿转载,谢谢. 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你 ...
- 【Git】Git工具常用命令
GitHub使用指南 一.把本地代码上传到GitHub 0. 提前配置好上传地址 [git config --global user.name "username"] [git c ...
- Java 中 json字符串转换为类
使用到alibaba.fastjson包 具体实现 JSONObject jsonObject = JSONObject.parseObject(msg); SmsSenderStatus smsSe ...
- js数组求差集
var arr1 = [2,3,5,88,99,444,66];var arr2 = [2,88,66]; arr_dive(arr1,arr2); function arr_dive(aArr,bA ...
- 修改hosts不必重启 立刻生效
打开命令提示符窗口执行以下命令: 显示DNS缓存内容 ipconfig /displaydns 删除DNS缓存内容 ipconfig /flushdns ps.电脑卡的话,先关机再开机(别直接重启)
- IntelliJ IDEA设置统一编码utf-8
File菜单->Other Settings->Default Settings->File Encodings 全改成utf-8!