24

我正在尝试将旧的 django 应用程序迁移到 django 1.5,不同的 html 文件中有 745 个 url,如下所示:

{% url url_name %}

如果我没记错的话,这已被弃用,不能再从 django 1.5 开始使用(如此所述),我必须将它们全部转换为:

{% url 'url_name' %}

有什么想法可以做到这一点而不会发疯吗?也许,某种脚本,我不知道......我无法想象用路径中的替换来做到这一点。

我可能遗漏了一些明显的东西。

4

2 回答 2

39

注意:此命令具有破坏性。在运行之前使用版本控制或备份您的模板目录。

您可以使用 sed。从您的模板目录(或目录)运行

sed -i -r -e "s#\{% url ([a-zA-Z0-9_.:-]+)#\{% url '\1'#g" *

表达式匹配{% url [view name],因此提供给 url 模板标签的参数将不受影响/不变。

要递归运行它,

find . -type f -print0 | xargs -0 sed -i -r -e "s#\{% url ([a-zA-Z0-9_.:-]+)#\{% url '\1'#g"

此 sed 命令假定您的视图名称仅包含字母数字、冒号、破折号、句点和下划线 - 没有其他特殊字符。现在支持命名空间视图。

针对此Django 1.4 url​​ 模板标签 Gist中的标签进行测试

于 2012-11-27T20:48:34.177 回答
2

在http://djangosnippets.org/snippets/2905/上还有一个带有 python 解决方案的片段

只是一个警告, find 。-type f -print0 将在您的 .git/ 或 .hg/ 目录中查找“隐藏”的文件,并且可能会损坏您的存储库或其他二进制文件。

如果你在 django 中使用通常的约定,你的模板文件以 .html 结尾,你可以更谨慎地搜索:

find . -iname '*.html' -type f -print > file.list

首先检查 file.list 以检查哪些文件正在被修改,然后再将其与 sed 命令放在一起

于 2013-09-27T06:34:00.670 回答