将HTML转换为Django模板
我想写一个Python脚本,用来修改HTML文档,但我有点迷茫,不知道从哪里开始。我试过几种方法,但都没成功,所以我觉得没必要把那些方法发出来。
问题是,在使用Django的时候,链接最好是这样写:
<link href="{% static 'assets/css/cssfile.css' %}"/>
<script src="{% static 'assets/js/jsfile.js' %}"></script>
<img src="{% static 'assets/images/desktop.png' %}"/>
但是我有一个模板,实际上有好几个模板,里面有很多静态资源是用普通的方式引用的,像这样:
<link href="assets/css/cssfile.css" rel="stylesheet"/>
<script src="assets/js/jsfile.js"></script>
<img src="assets/images/desktop.png"/>
所以,我一直在尝试创建一个脚本,去查找“assets”,然后修改这一行,把 href="assets
替换成 href="{% static'
... 然后在最后加上 ' %}
。我觉得这个脚本对那些使用模板的Django开发者来说会非常有用,也许网上已经有类似的东西了。
有没有什么自动化的方法,可以把普通的href/src属性转换成Django标签呢?
3 个回答
这是vi编辑器的一个命令。在逃逸模式下运行这个命令。
:%s/href="([^ ]+)"/href="{% static \1 %}"/g
有一个Python的工具包可以帮你做到这一点,具体可以查看这个链接:https://pypi.org/project/djangify/
我假设你对正则表达式有一些了解。我个人喜欢用支持正则表达式的编辑器来进行这种修改,这样就可以通过搜索和替换来完成。如果你在使用Django,JetBrains的PyCharm非常值得投资。我自己比较喜欢用vim。
每个编辑器对正则表达式的捕获组都有一些不同的实现(请查看你使用的编辑器或IDE的文档),但一般来说,这种正则表达式的格式是:
(src|href)="(assets\/.+?)"
这个表达式是在寻找以assets
开头的src
或href
属性,并捕获引号之间的所有内容。所以,捕获组1是属性名,捕获组2是属性值 - 替换表达式是:
\1="{% static '\2' %}"
在某些编辑器中,你需要用$1
和$2
来代替\1
和\2
。在vim中,你需要对括号进行转义。此外,有些编辑器不支持这种语法(.+?
)来进行非贪婪的“捕获所有”,你可能需要用[^"]+
来代替。