Как мне изменить именованный URL-адрес Django на urlpattern, который его определяет?

#python #django #url-routing

#python #django #url-маршрутизация

Вопрос:

Мое приложение Django содержит пару внешних ссылок, например, на блог приложения, который не является частью кодовой базы Django и размещен на другом поддомене.

До сих пор ссылки на них были распространены по всему исходному коду как прямые абсолютные URL-адреса.

Теперь мне было интересно, есть ли способ использовать отличную систему маршрутизации URL-адресов Django и для этих внешних URL-адресов. Я думал, что смогу определить их следующим образом:

 url(r'^permalink/blog/$', RedirectView.as_view(url='https://blog.example.com'), name='blog'),
  

Тогда я мог бы просто ссылаться на них, как {% url 'blog' %} в моих шаблонах. Это работает.


Теперь мне было интересно, есть ли способ разрешить их непосредственно в «окончательный» URL-адрес с помощью специального (самостоятельно определенного) тега шаблона, чтобы они отображались как https://blog.example.com для пользователя, а не /permalink/blog/ (для браузера) или https://app.example.com/permalink/blog/ (для пользователя). У меня уже есть собственный {% absolute_url %} тег шаблона, который я использую в шаблонах, требующих абсолютных URL-адресов, таких как транзакционная электронная почта.

Однако я не смог найти способ изменить именованный URL (например external:blog ) на его urlpattern в отличие от его конечного относительного URL. Чтобы сделать это самостоятельно, похоже, мне придется дублировать весь код из URLNode.render() , urlresolvers.reverse плюс, возможно, части RegexURLResolver._reverse_with_prefix() . Это довольно много кода, но я не видел более простой точки входа / подключения в систему. Я пропустил трюк там?


Подводя итог, я в основном ищу функцию, которой я могу передать именованный URL, например

 external:blog
  

и получить RegexURLPattern экземпляр обратно, например

 RegexURLPattern(r'^permalink/blog/$', RedirectView('https://blog.example.com'), {}, 'blog')
  

или, может быть, просто представление тоже может работать.

Комментарии:

1. проверьте sites фреймворк для Django — docs.djangoproject.com/en/1.10/ref/contrib/sites /…

2. @yedpodtrzitko Я не вижу связи между опубликованной вами ссылкой и моим вопросом. Пожалуйста, уточните в качестве ответа!