2012-11-27 21 views
23

django Ich versuche, eine alte django Anwendung zu migrieren 1,5 bis django, dort sind 745 URLs in verschiedenen HTML-Dateien wie diese Art und Weise:Migrate URL-Tags 1.5

{% url url_name %} 

Wenn ich mich nicht falsch, diese mehr aus war veraltet und kann nicht mehr als 1,5 django verwendet werden (wie gesagt here), und ich habe sie alle in verwandeln:

{% url 'url_name' %} 

Jede Idee, dies zu tun, ohne verrückt zu werden? Vielleicht, irgendeine Art von Skript, ich weiß nicht ... Ich kann mir keinen Weg vorstellen, es mit Pfad zu ersetzen.

Ich vermisse wahrscheinlich etwas offensichtlich.

Antwort

38

HINWEIS: Dieser Befehl ist destruktiv. Verwenden Sie die Versionskontrolle oder sichern Sie Ihr Templates-Verzeichnis, bevor Sie es ausführen.

Sie können sed verwenden. Von Ihrem Vorlagenverzeichnis (oder Verzeichnisse)

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

Der Ausdruck passt {% url [view name] laufen, also Argumente an die URL-Vorlage-Tag versehen werden unbeeinflusst/unverändert.

es rekursiv auszuführen,

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

Dieser sed Befehl setzt voraus, nur Ihre Ansicht Namen alphanumerics, Doppelpunkte, Striche, Punkte enthalten und unterstreicht - keine anderen Sonderzeichen. Unterstützt jetzt Namespace-Ansichten.

Getestet gegen die Tags in diesem Django 1.4 url template tag Gist

+0

Danke, sehr nette Antwort, es hat wie erwartet funktioniert. – kastillo

+0

Ich kann nicht scheinen, dass dies funktioniert. Es hat alle Dateien berührt, aber keine Änderungen vorgenommen .. Irgendwelche Ideen? –

+0

Oli's Bearbeitung hat sich geändert * zu +, was das '-r'-Flag für erweiterte Regex (zumindest auf meinem Computer) erfordert. Ich habe die obige Antwort aktualisiert. – Enrico

2

Es mit einer Lösung in Python bei http://djangosnippets.org/snippets/2905/

Nur eine Warnung, der Fund auch ein Ausschnitt ist. -type f -print0 findet Dateien, die wie Dateien in Ihren .git/oder .hg/Verzeichnissen "versteckt" sind und Ihr Repository oder andere Binärdateien beschädigen können.

Wenn Sie die übliche Konvention in django mit Ihrer Vorlage verwenden, um Dateien in .html enden, können Sie vorsichtiger mit der Suche:

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

untersuchen file.list zunächst zu prüfen, welche Dateien, bevor sie setzt geändert werden zusammen mit dem sed Befehl