将 url 标签迁移到 django 1.5

Posted

技术标签:

【中文标题】将 url 标签迁移到 django 1.5【英文标题】:Migrate url tags to django 1.5 【发布时间】:2012-11-15 10:56:13 【问题描述】:

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

% url url_name %

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

% url 'url_name' %

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

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

【问题讨论】:

【参考方案1】:

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

您可以使用 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 template tag Gist 中的标签进行了测试

【讨论】:

我似乎无法让它工作。它触及了所有文件,但没有做任何更改。有什么想法吗? Oli 的编辑将 * 更改为 +,这需要 -r 标志用于扩展正则表达式(至少在我的计算机上)。我已经更新了上面的答案。 这不起作用,它会将 % url app:name % 变成 % url 'app':name %。修复:[a-zA-Z0-9_.:-] @leplatrem,已修复。谢谢。 在 MacOS 下,FreeBSD sed 语法不同。将-r 替换为-E-i 需要一个后缀参数,它可以是一个空字符串——例如sed -i '' -E -e ...【参考方案2】:

在http://djangosnippets.org/snippets/2905/http://djangosnippets.org/snippets/2905/也有一个带有python解决方案的sn-p

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

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

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

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

【讨论】:

以上是关于将 url 标签迁移到 django 1.5的主要内容,如果未能解决你的问题,请参考以下文章

从 1.5 迁移到 1.7 时的单元测试警告

如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO)

如何将 Django 项目迁移到 Pythonanywhere

如何将复杂项目从 Angular 1.5 迁移到 2?

迁移到新主机后,Joomla 站点 URL 重写不起作用

将 Spring boot 1.5 迁移到 2.x 无法启动应用程序