2012-11-27 73 views
23

我試圖遷移一個古老的Django應用程序Django的1.5,有745個網址在不同的HTML文件,這種方式:遷移網址標籤的Django 1.5

{% url url_name %} 

如果我沒看錯,這被廢棄,不能從Django的1.5(如說here)再使用了,我得個個變成:

{% url 'url_name' %} 

任何想法要做到這一點,而不去瘋了嗎?也許,某種腳本,我不知道... 我無法想象一種方法來替代路徑。

我可能錯過了一些明顯的東西。

回答

38

NOTE:該命令具有破壞性。在運行之前使用版本控制或備份模板目錄。

您可以使用sed。從你的模板目錄(或目錄)運行

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

的表達式匹配{% url [view name],所以提供的網址模板標籤的參數將不受影響/不變。

遞歸運行它,

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

+0

謝謝,非常好的答案,它按預期工作。 – kastillo

+0

我似乎無法得到此工作。它觸及了所有文件,但沒有做任何更改。任何想法? –

+0

奧利的編輯改變*爲+,這需要擴展正則表達式的「-r」標誌(至少在我的電腦上)。我已經更新了上面的答案。 – Enrico

2

,還可以用Python溶液中的片段在http://djangosnippets.org/snippets/2905/

只是一個警告,查找。 -type f -print0會找到類似於.git /或.hg /目錄中文件的「隱藏」文件,並可能損壞您的存儲庫或其他二進制文件。

如果使用在Django的通用慣例與你的模板文件中.html結尾,你可以搜索更多的謹慎與:

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

檢查第一的File.List檢查把它之前該文件被修改加上sed命令