我的Django应用程序包含几个外部引用,例如应用程序的博客,它不是Django代码库的一部分,托管在不同的子域中。
到目前为止,这些链接在源代码中作为直接绝对URL传播。
现在我想知道是否有办法将Django优秀的URL路由系统用于这些外部URL。我以为我可以像这样定义它们:
url(r'^permalink/blog/$', RedirectView.as_view(url='https://blog.example.com'), name='blog'),
然后我可以在我的模板中将它们引用为{% url 'blog' %}
。这很有效。
现在我想知道是否有办法使用特殊的(自定义的)模板标签将这些直接解析为“最终”网址,以便它们对用户显示为https://blog.example.com
,而不是/permalink/blog/
(对浏览器)或https://app.example.com/permalink/blog/
(对用户)。我已经有了一个自定义的{% absolute_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')
或者也许只是视图也可以。