2012-01-19 103 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,在任何书签,或者你错过任何链接的情况的图。