Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django多租户_Python_Django_Django Urls - Fatal编程技术网

Python Django多租户

Python Django多租户,python,django,django-urls,Python,Django,Django Urls,Tl;dr:有没有一种方法可以覆盖默认的行为 在我的django项目中,我有很多URL,比如 url(r'^\w+/company/', include("company.urls", namespace="company")), .../companyA/company/ .../companyB/company/ 它允许URL,例如 url(r'^\w+/company/', include("company.urls", namespace="company")), .../co

Tl;dr:有没有一种方法可以覆盖默认的行为

在我的django项目中,我有很多URL,比如

 url(r'^\w+/company/', include("company.urls", namespace="company")),
.../companyA/company/
.../companyB/company/
它允许URL,例如

 url(r'^\w+/company/', include("company.urls", namespace="company")),
.../companyA/company/
.../companyB/company/
这样,我就可以使用自定义中间件修改请求,根据公司使用我的站点的情况,包括一些特定的细节

除了django试图用
reverse
{%url..%}
破译完整路径外,这一切都可以正常工作

它似乎返回了
/x/company/
,作为正则表达式的默认匹配项。因为
django.utils.regex\u helper
方法
next\u char
有一个转义映射,
\w
映射到
x

url
标记我已经能够用正确的公司名称替换
/x/
,我想知道是否有类似的方法可以用同样的方法覆盖
反向
,或者我可以做些什么来解决这个问题

以前,我用的是

url(r'^(?P<company_name>\w+)/company/', include("company.urls", namespace="company"))

以及将其包含在我试图避免的对视图的所有其他调用(即使用
{%url%}
)中。

为了便于使用,Django包作为编译包可以实现这一点。然而,下面是我自己的简单实现


我修改了我的nginx代理配置以使用以下内容

server_name ~(?<short_url>\w+)\.domainurl\.com$;

... stuff related to static files here
location / {
        proxy_set_header X-CustomUrl $short_url;
        .... other proxy settings
}
示例:

www.companya.domainurl.com   # short_url is companya
test.domainurl.com           # short_url is test
要在模板中使用此选项,必须将上下文处理器添加到
settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    'django.core.context_processors.request'  # This one in particular
)

您正在尝试进行多租户。有几种方法可以解决这个问题(覆盖反向不是其中之一)。请看。@BurhanKhalid-我查看了该链接中建议的一个包,它们确实存在,尽管它们的方法涉及根据设置返回不同的url,但我希望有更具动态性的东西(老实说,我认为这是不可能的)