【发布时间】:2015-07-08 10:05:32
【问题描述】:
Tl;博士:有没有办法覆盖reverse 的默认行为?
在我的 django 项目中,我有很多网址,例如
url(r'^\w+/company/', include("company.urls", namespace="company")),
允许使用诸如
之类的网址.../companyA/company/
.../companyB/company/
这样我就可以使用自定义中间件来修改请求,以根据正在使用我的网站的公司包含一些具体细节
除了 django 试图用 reverse 和 {% url .. %} 破译完整路径时,这一切都很好......
它似乎返回/x/company/ 作为正则表达式的默认匹配项。因为django.utils.regex_helper 方法next_char 有一个转义映射\w 映射到x
url 标签我已经能够override 用正确的公司名称替换/x/,我想知道是否有类似的事情可以用同样的方式覆盖reverse,或者我能做些什么来解决这个问题?
以前我用的是
url(r'^(?P<company_name>\w+)/company/', include("company.urls", namespace="company"))
但这意味着我必须在每个视图中包含一个参数
def view(request, company_name):
...
以及将它包含在我试图避免的所有其他视图调用中(即使用{% url %})。
【问题讨论】:
-
您正在尝试进行多租户。有几种方法可以解决这个问题(重写 reverse 不是其中之一)。见this。
-
@BurhanKhalid - 我查看了该链接中建议的软件包之一,他们确实做到了override reverse 尽管他们这样做的方法涉及根据设置返回不同的 url,但我希望得到一些东西更有活力(老实说,我认为这是不可能的)
标签: python django django-urls