我有一些自定义逻辑需要在每次反转URL时执行,即使对于第三方应用也是如此。我的项目是一个多租户Web应用程序,并根据URL识别租户。没有一个有效的URL不包含租户标识符。
我已经有reverse
的包装函数,但现在我需要一种方法来告诉每个已安装的应用程序使用它。 reverse
周围的包装器使用线程本地将标识符注入到生成的URL中。我可以在reverse
上将此函数编写为装饰器,但我不知道在哪里进行实际装饰。
适度坚定的约束:我已经在使用3个第三方应用,我可能会添加更多。解决方案不应要求我修改所有这些第三方应用的源代码。如果有更简单的方法,我不喜欢在多个第三方源树之上维护补丁的想法。我可以非常清楚地说明reverse
已被装饰。
原始问题:我可以在哪里进行此类更改,以确保它适用于reverse
的每次调用?
可能的替代问题:确保每个网址(包括第三方应用程序生成的网址)获取租户标识符的更好方法是什么? 顺便说一下,除了在URL中嵌入tenant-id之外,我还有更好的办法处理这些问题。这个决定现在已经很好了。感谢。
感谢。
答案 0 :(得分:5)
只有这样才能将django reverse替换为ur_reverse
django.core.urlresolvers.reverse = ur_reverse
或者你喜欢decorator syntactic sugar
django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )
除非你不愿意用ur_reverse改变反向的每一种用法,否则我不会建议(很多人都会喊)