如何在Django模板中集中URL?

时间:2012-01-19 00:08:39

标签: django django-templates django-urls

我在编写我的Django应用程序时硬编码模板中的所有URL时犯了一个错误。

例如,我的链接如下:

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

现在,我的客户坚决要求我将所有链接实例更改为

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

“class”取代“course”。

用爱默生的话说,愚蠢的一致性是小脑袋的大人物,所以我必须通过艰苦的寻找和替换操作来为我的错误付出代价。

在这里做什么是正确的?

3 个答案:

答案 0 :(得分: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 :(得分:2)

我认为标准方法是使用url template tag

{% url path.to.course_view 63 %}

...主要的好处是您不需要对URL进行硬编码。所以现在有点晚了,但是这次你也可以使用url标签,以防明天客户回来并希望他们全部阅读/classes/class/63 - 此时你将会只需要更改URLconf文件中的单个URL模式。

答案 2 :(得分:1)

使用sed(在提交版本控制之后)。一个搜索并替换整个目录。

这是一个方法:http://www.grymoire.com/Unix/Sed.html

您可能还应该创建一个视图,将旧式网址重定向到新式网址,以防任何书签或您遗漏的任何链接。