24

古い django アプリケーションを django 1.5 に移行しようとしています。次のように、さまざまな html ファイルに 745 個の URL があります。

{% url url_name %}

私が間違っていなければ、これは非推奨であり、django 1.5 からは使用できなくなりました (ここで述べたように)。それらすべてを次のように変換する必要があります。

{% url 'url_name' %}

夢中にならずにこれを行うアイデアはありますか?たぶん、ある種のスクリプト、わかりません...パスの置換でそれを行う方法を想像できません。

私はおそらく明らかな何かを見逃しています。

4

2 に答える 2

39

注:このコマンドは破壊的です。実行する前に、バージョン管理を使用するか、テンプレート ディレクトリをバックアップしてください。

シードを使用できます。テンプレート ディレクトリ (またはディレクトリ) から実行します。

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 テンプレート タグ Gistのタグに対してテスト済み

于 2012-11-27T20:48:34.177 に答える
2

http://djangosnippets.org/snippets/2905/には、Python でのソリューションを含むスニペットもあります。

ただの警告、 find . -type f -print0 は、.git/ または .hg/ ディレクトリ内のファイルのように「隠されている」ファイルを検出し、リポジトリまたはその他のバイナリ ファイルを破損する可能性があります。

.html で終わるテンプレート ファイルを使用して django で通常の規則を使用する場合は、次の方法でより慎重に検索できます。

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

file.list を最初に調べて、sed コマンドでまとめる前に、どのファイルが変更されているかを確認します

于 2013-09-27T06:34:00.670 に答える