代码之家  ›  专栏  ›  技术社区  ›  Hank Gay

是否可以在Django项目中重新定义Reverse?

  •  3
  • Hank Gay  · 技术社区  · 16 年前

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

    我已经有了一个包装函数 reverse 但是现在我需要一种方法来告诉每个安装的应用程序使用它。包装纸 颠倒 使用本地线程将标识符注入到结果的URL中。我可以在 颠倒 但是我不知道在哪里做真正的装饰。

    适度的严格限制:我已经使用了3个第三方应用程序,我可能会添加更多。解决方案 不应该 要求我修改所有这些第三方应用程序的源代码。如果有更简单的方法,我不喜欢在多个第三方源树上维护补丁的想法。我可以非常清楚地说明 颠倒 已经装饰好了。

    最初的问题是:我在哪里可以做出这样的改变,保证它适用于 颠倒 是吗?

    可能的另一个问题:有什么更好的方法可以确保每个URL(包括第三方应用程序生成的URL)都获得租户标识符? 顺便说一句,除了在URL中嵌入租户ID之外,我愿意用更好的方法来处理任何这些问题;这个决定现在已经在Stone中得到了很好的体现。谢谢。

    谢谢。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Anurag Uniyal    16 年前

    唯一的办法是让Django倒车换成Ur_倒车

    django.core.urlresolvers.reverse = ur_reverse
    

    或者如果你喜欢装饰师的句法糖

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

    我不会建议(很多人会大喊大叫),除非你不愿意改变每一个使用反向与你的反向

    推荐文章