Можно ли переопределить обратное в проекте Django? - PullRequest
3 голосов
/ 09 ноября 2009

У меня есть некоторая настраиваемая логика, которая должна выполняться каждый раз, когда URL-адрес меняется, даже для сторонних приложений. Мой проект является многопользовательским веб-приложением, и клиент идентифицируется на основе URL. Не существует ни одного действительного URL, который не содержит идентификатора клиента.

У меня уже есть функция оболочки около reverse, но теперь мне нужен способ указать каждому установленному приложению использовать его. Оболочка вокруг reverse использует локальный поток для вставки идентификатора в результирующий URL. Я мог бы написать эту функцию в качестве декоратора на reverse, но я не знаю, где сделать фактическое оформление.

Умеренно твердое ограничение: я уже использую 3 сторонних приложения и, вероятно, добавлю больше. Решение не должно требовать от меня изменения исходного кода всех этих сторонних приложений. Мне не нравится идея поддерживать патчи поверх множества сторонних исходных деревьев, если есть более простой способ. Я могу сделать документацию совершенно ясно, что reverse был оформлен.

Первоначальный вопрос: где я могу внести такое изменение, которое гарантирует, что оно будет применяться к каждому вызову reverse?

Возможный альтернативный вопрос. Какой лучший способ убедиться, что каждый URL-адрес, в том числе сгенерированный сторонними приложениями, получает идентификатор клиента? Кстати, я открыт для лучшего способа справиться со всем этим, кроме встраивания идентификатора клиента в URL; это решение довольно прямо сейчас. Спасибо.

Спасибо.

1 Ответ

5 голосов
/ 09 ноября 2009

единственный способ, чтобы реверс django был заменен на ur_reverse

django.core.urlresolvers.reverse = ur_reverse

или если вам нравится декоратор синтаксического сахара

django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )

, который я бы не советовал (и многие будут кричать), если только вы не желаете изменить каждое использование реверса с помощью ur_reverse

...