#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 Я не вижу связи между опубликованной вами ссылкой и моим вопросом. Пожалуйста, уточните в качестве ответа!