首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在urlpattern中加载外部(绝对) URL

在urlpattern中加载外部(绝对) URL
EN

Stack Overflow用户
提问于 2020-06-29 13:18:30
回答 5查看 415关注 0票数 2

我希望将Django中的URL模式与外部URL相关联,因为我的一些视图需要指向不同的子域。请注意,所有的子域都使用完全相同的Django实例,所以我仍然在我的应用程序中引用本地视图。在某些情况下,我只需要将用户发送到不同的域。我考虑过sites框架,但还有其他因素阻止我使用它。解决方案似乎就在那里,但我有一个绊脚石。

我这样做:

代码语言:javascript
复制
urlpatterns += [
    path("https://subdomain.mywebsite.com/", include("site.urls")),
]

这项工作。但是,当我像这样生成URLS时:

代码语言:javascript
复制
<a href="{% url "somepage" %}">link</a>

然后它就会引出:

代码语言:javascript
复制
<a href="/https://subdomain.mywebsite.com/record/">link</a>

换句话说,在生成的URL前面有一个斜杠。除此之外,一切都运行得很好。我怎么才能摆脱它呢?

EN

Stack Overflow用户

发布于 2020-07-02 19:53:01

让我们把它变成一个更具体的案例。假设我们使用一个帐户应用程序进行帐户管理,但是在一个集中的子域"auth.example.com“上。我们已经采取了所有步骤,通过在settings.py中设置适当的值,来确保会话和CSRF cookie在我们的主站点"www.example.com“上是可读的。此外,我们可以通过将REDIRECT_AUTH_TO_AUTH_SUBDOMAIN设置为False来关闭此行为。

代码语言:javascript
复制
from django.conf import settings
from django.core.exceptions import MiddlewareNotUsed
from django import http


class AuthRedirectMiddleware:
    AUTH_SUBDOMAIN = "auth.example.com"

    def __init__(self, get_response=None):
        if not settings.REDIRECT_AUTH_TO_AUTH_SUBDOMAIN:
            raise MiddlewareNotUsed
        self.get_reponse = get_response

    def __call__(self, request: http.HttpRequest):
        if request.get_full_path().startswith("/account/"):
            host = request.get_host()
            if host != self.AUTH_SUBDOMAIN:
                url = request.build_absolute_uri().replace(host, self.AUTH_SUBDOMAIN)
                return http.HttpResponseRedirect(url)

        return self.get_reponse()

你的urlconf应该是:

代码语言:javascript
复制
urlpatterns = [
    path("account/", include("account.urls"),
    ...
]

模板中的反向链接不会有域名,而是简单地/account/login/,然后重定向到auth子域。

票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62631664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档