如何将指定的Django URL转换为定义它的urlpattern?

时间:2016-10-01 17:40:41

标签: python django url-routing

我的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')

或者也许只是视图也可以。

0 个答案:

没有答案