将HTML转换为Django模板

3 投票
3 回答
3384 浏览
提问于 2025-04-18 18:45

我想写一个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 个回答

0

这是vi编辑器的一个命令。在逃逸模式下运行这个命令。

:%s/href="([^ ]+)"/href="{% static \1 %}"/g

4

有一个Python的工具包可以帮你做到这一点,具体可以查看这个链接:https://pypi.org/project/djangify/

4

我假设你对正则表达式有一些了解。我个人喜欢用支持正则表达式的编辑器来进行这种修改,这样就可以通过搜索和替换来完成。如果你在使用Django,JetBrains的PyCharm非常值得投资。我自己比较喜欢用vim。

每个编辑器对正则表达式的捕获组都有一些不同的实现(请查看你使用的编辑器或IDE的文档),但一般来说,这种正则表达式的格式是:

(src|href)="(assets\/.+?)"

这个表达式是在寻找以assets开头的srchref属性,并捕获引号之间的所有内容。所以,捕获组1是属性名,捕获组2是属性值 - 替换表达式是:

\1="{% static '\2' %}"

在某些编辑器中,你需要用$1$2来代替\1\2。在vim中,你需要对括号进行转义。此外,有些编辑器不支持这种语法(.+?)来进行非贪婪的“捕获所有”,你可能需要用[^"]+来代替。

撰写回答