3

我有一些自定义逻辑,每次反转 URL 时都需要执行,即使对于第三方应用程序也是如此。我的项目是一个多租户的 web 应用,租户是根据 URL 来识别的。没有一个有效的 URL 不包含租户标识符。

我已经有一个包装函数reverse,但现在我需要一种方法来告诉每个已安装的应用程序使用它。包装器reverse使用本地线程将标识符注入到生成的 URL 中。我可以把这个函数写成装饰器reverse,但我不知道在哪里做实际的装饰。

适度严格的约束:我已经在使用 3 个 3rd-party 应用程序,我可能会添加更多。解决方案不应该要求我修改所有这些第三方应用程序的源代码。如果有更简单的方法,我不喜欢在多个 3rd 方源代码树之上维护补丁的想法。我可以使reverse已修饰的文档非常清晰。

原始问题:我在哪里可以进行这样的更改以保证它适用于每次调用reverse

可能的替代问题:确保每个 URL(包括由 3rd 方应用程序生成的 URL)获取租户标识符的更好方法是什么?顺便说一句,除了在 URL 中嵌入租户 ID 之外,我愿意采用更好的方法来处理任何这些问题;这个决定现在已经很确定了。谢谢。

谢谢。

4

1 回答 1

5

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

django.core.urlresolvers.reverse = ur_reverse

或者如果你喜欢装饰器语法糖

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

我不会建议(很多人会大喊),除非您不愿意使用 ur_reverse 更改反向的所有用法

于 2009-11-09T12:22:26.620 回答