Как я могу централизовать URL в шаблонах Django? - PullRequest
3 голосов
/ 19 января 2012

Я допустил ошибку при написании моего приложения Django в жестком кодировании всех URL-адресов в моих шаблонах.

Например, мои ссылки выглядят так:

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

Теперь мой клиент непреклонно хочет, чтобы я изменил все экземпляры ссылок, похожих на эту, на

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

где «класс» заменяет «курс».

По словам Эмерсона, глупая последовательность - это хобгоблин маленьких умов, поэтому я должен заплатить за свою ошибку, проведя кропотливую операцию поиска и замены.

Что здесь было правильно делать?

Ответы [ 3 ]

6 голосов
/ 19 января 2012

Предполагая, что в вашем urls.py есть такая запись:

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

Вы могли бы использовать тег шаблона URL в своем шаблоне:

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

Затем, когда ваш клиент попросил вас изменить URL-адреса, вам нужно будет сделать только одно изменение в вашем urls.py.

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

Никаких изменений в шаблонах не потребуется.поиск и замена - теперь вы знаете, в следующий раз;)

2 голосов
/ 19 января 2012

Я считаю, что стандартным подходом было бы использование url шаблона тега :

{% url path.to.course_view 63 %}

... главное преимущество в том, что вам не нужно жестко кодировать URL-адреса,Так что сейчас немного поздно, но вы могли бы также использовать тег url на этот раз, на тот случай, если клиент вернется завтра и захочет, чтобы они прочитали /classes/class/63 - тогда вам нужно будет только изменитьодин шаблон URL в вашем файле URLconf.

1 голос
/ 19 января 2012

Используйте sed (после фиксации в вашем контроле версий).Один поиск и замена по всему каталогу.

Вот как: http://www.grymoire.com/Unix/Sed.html

Вам, вероятно, следует также создать представление, которое перенаправляет URL старого стиля на URL нового стиля вВ случае каких-либо закладок или пропущенных вами ссылок.

...