【问题标题】:Migrate url tags to django 1.5将 url 标签迁移到 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' %}

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

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

【问题讨论】:

    标签: django django-templates django-1.5


    【解决方案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 命令放在一起

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2013-06-08
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多