是否有可能重新定义反向的Django项目?
-
19-09-2019 - |
题
予有需要每一次一个URL被反转,即使对于第三方应用程序要执行一些定制逻辑。我的项目是一个多租户Web应用程序,而租户是基于URL标识。没有不包括租户标识符的单个有效的URL。
我身边已经有了reverse
的包装功能,但现在我需要一种方法来告诉每一个安装的应用程序来使用它。各地reverse
包装器使用一个线程本地的标识注入所产生的URL。我可以写这个函数作为reverse
一个装饰,但我不知道在哪里做实际的装修。
适度硬性限制:我已经使用3第三方应用程序,我可能会增加更多。溶液的不应该的要求我修改所有这些第三方应用程序的源代码。我可不乐意维持在多个第三方源代码树的顶部补丁,如果有一个更简单的方法的想法。我可以使文档十分清楚地表明reverse
已装饰。
原来的问题:我在哪里可以做出这样可保证它将适用于reverse
的每次调用
可能的替代问题:什么是确保每一个网址,包括第三方生成的应用程序,得到租户标识符的更好的办法? 顺便说一句,我是开到一个更好的方式来处理任何这只是在URL中的租户ID的嵌入;这一决定是在石头漂亮设定现在。感谢。
感谢。
解决方案
唯一方式使得django的反向由ur_reverse替换是
django.core.urlresolvers.reverse = ur_reverse
或者如果你喜欢装饰语法糖
django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )
是我所不愿意的意见(很多人会喊),除非你是不是愿意改变反向的每一个使用与ur_reverse
不隶属于 StackOverflow