Han*_*Gay 3 python django reverse monkeypatching decorator
我有一些自定义逻辑需要在每次反转URL时执行,即使对于第三方应用程序也是如此.我的项目是一个多租户Web应用程序,并根据URL识别租户.没有一个有效的URL不包含租户标识符.
我已经有了一个包装函数reverse
,但现在我需要一种方法来告诉每个已安装的应用程序使用它.包装器reverse
使用线程本地将标识符注入到生成的URL中.我可以把这个函数写成装饰器reverse
,但我不知道在哪里做实际的装饰.
适度坚定的约束:我已经使用了3个第三方应用程序,我可能会添加更多.解决方案不应要求我修改所有这些第三方应用程序的源代码.如果有更简单的方法,我不喜欢在多个第三方源树之上维护补丁的想法.我可以清楚地说明reverse
装饰过的文件.
原始问题:我可以在哪里进行这样的更改以保证它适用于每次调用reverse
?
可能的替代问题:确保每个URL(包括第三方应用程序生成的URL)获取租户标识符的更好方法是什么?顺便说一句,除了在URL中嵌入tenant-id之外,我还有更好的办法处理这些问题.这个决定现在已经很好了.谢谢.
谢谢.
只有这样才能使django reverse被ur_reverse取代
django.core.urlresolvers.reverse = ur_reverse
Run Code Online (Sandbox Code Playgroud)
或者如果你喜欢装饰语法糖
django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )
Run Code Online (Sandbox Code Playgroud)
除非你不愿意用ur_reverse改变反向的每一种用法,否则我不会建议(很多人都会喊)
归档时间: |
|
查看次数: |
222 次 |
最近记录: |