2012-01-19 43 views
3

我在編寫我的Django應用程序時對我的模板中的所有URL進行了硬編碼時犯了一個錯誤。如何在Django模板中集中URL?

例如,我的鏈接如下所示:

<a href="/course/63/">Advanced Basketweaving</a> 

現在,我的客戶堅決要我改變類似於這一個鏈接所有實例

<a href="/class/63/">Advanced Basketweaving</a> 

其中「類」取代「課程」。

在愛默生的話,一個愚蠢的一致性是渺小心靈的妖怪,所以我必須通過開展一個艱苦的查找支付我的錯誤和替換操作。

是什麼在這裏做正確的事情?

回答

6

假設你的urls.py有過這樣的條目:

url(r'^course/(?P<course_id>\d+)/$', view_course, name='view_course') 

你也可以使用在您的模板url template tag

<a href="{% url view_course course.id %}">Advanced Basketweaving</a> 

那麼當你的客戶要求你改變網址,你必須在你的urls.py中只做一個改變。

url(r'^class/(?P<course_id>\d+)/$', view_course, name='view_course') 

模板不需要改變。

快樂搜索和替換 - 現在你知道下一次;)

+1

第三參數'url'是'kwargs',所以我認爲你必須使用'名='view_course''。 – 2012-01-19 01:55:07

+0

@BrianNeal Args版本也適用。 – DrTyrsa 2012-01-19 07:47:00

+0

好點,URL模式被破壞。現在修復。 – Alasdair 2012-01-19 09:10:58

2

我相信標準的方法是使用url template tag

{% url path.to.course_view 63 %} 

...的主要好處是,你不需要硬編碼的URL。所以這是一個有點晚了,但你不妨使用url標籤這一次,以防萬一客戶,明天就回來,並希望他們都讀/classes/class/63 - 此時你只需要改變單一的URL模式在您的URLconf文件中。

1

用sed(提交到版本控制之後)。一次搜索並替換整個目錄。

這裏有一個HOWTO:http://www.grymoire.com/Unix/Sed.html

你或許應該還可以創建被重定向舊式的URL到新的風格的URL,在任何書籤,或者你錯過任何鏈接的情況的圖。