将url标记迁移到django 1.5

kas*_*llo 24 django django-templates django-1.5

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

{% url url_name %}
Run Code Online (Sandbox Code Playgroud)

如果我没看错,这个被废弃,不能从Django的1.5再使用(如说这里),我要所有的人都变成:

{% url 'url_name' %}
Run Code Online (Sandbox Code Playgroud)

有没有想过这样做而不会发疯?也许,某种脚本,我不知道......我无法想象用路径替换它的方法.

我可能错过了一些明显的东西.

Enr*_*ico 39

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

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

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

表达式匹配{% url [view name],因此提供给url模板标记的参数将不受影响/未更改.

要递归地运行它,

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

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

测试了这个Django 1.4 url​​模板标签Gist中的标签

  • 在MacOS下,FreeBSD`sed'语法有所不同.将`-r`替换为`-E`,`-i`需要一个后缀参数,该参数可以是一个空字符串 - 例如`sed -i'' - E -e ...` (2认同)