我正在尝试将旧的 django 应用程序迁移到 django 1.5,不同的 html 文件中有 745 个 url,如下所示:
{% url url_name %}
如果我没记错的话,这已被弃用,不能再从 django 1.5 开始使用(如此处所述),我必须将它们全部转换为:
{% url 'url_name' %}
有什么想法可以做到这一点而不会发疯吗?也许,某种脚本,我不知道......我无法想象用路径中的替换来做到这一点。
我可能遗漏了一些明显的东西。
我正在尝试将旧的 django 应用程序迁移到 django 1.5,不同的 html 文件中有 745 个 url,如下所示:
{% url url_name %}
如果我没记错的话,这已被弃用,不能再从 django 1.5 开始使用(如此处所述),我必须将它们全部转换为:
{% url 'url_name' %}
有什么想法可以做到这一点而不会发疯吗?也许,某种脚本,我不知道......我无法想象用路径中的替换来做到这一点。
我可能遗漏了一些明显的东西。
注意:此命令具有破坏性。在运行之前使用版本控制或备份您的模板目录。
您可以使用 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 命令假定您的视图名称仅包含字母数字、冒号、破折号、句点和下划线 - 没有其他特殊字符。现在支持命名空间视图。
在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 命令放在一起