编程语言
首页 > 编程语言> > python-是否可以在Django项目中重新定义反向?

python-是否可以在Django项目中重新定义反向?

作者:互联网

我有一些自定义逻辑,即使URL对于第三方应用程序,URL每次反向都需要执行.我的项目是一个多租户Web应用程序,并且根据URL标识了租户.没有一个有效的URL不包含租户标识符.

我已经有了逆向包装函数,但是现在我需要一种方法来告诉每个已安装的应用程序使用它.反向包装器使用局部线程将标识符注入到结果URL中.我可以将这个功能写为反向装饰器,但是我不知道在哪里进行实际装饰.

中度公司约束:我已经在使用3个第三方应用程序,并且可能还会添加更多.解决方案不应要求我修改所有这些第三方应用程序的源代码.如果有更简单的方法,我不喜欢在多个第三方源代码树的顶部维护补丁的想法.我可以使文档清楚地表明反向装饰已被装饰.

最初的问题:我在哪里可以进行这样的更改以保证它适用于每次反向调用?

可能的替代问题:有什么更好的方法来确保每个URL(包括由第三方应用生成的URL)都获得租户标识符?
顺便说一句,除了在URL中嵌入tenant-id之外,我愿意提供一种更好的方法来处理任何此类问题.这个决定现在已经定下来了.谢谢.

谢谢.

解决方法:

使django reverse被ur_reverse代替的唯一方法是

django.core.urlresolvers.reverse = ur_reverse

或者如果您喜欢装饰语法糖

django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )

除非您不愿意使用ur_reverse更改对reverse的每种用法,否则我不建议这样做(很多人会大喊)

标签:decorator,reverse,monkeypatching,python,django
来源: https://codeday.me/bug/20191024/1919807.html