将 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的主要内容,如果未能解决你的问题,请参考以下文章
如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO)