我希望将Django中的URL模式与外部URL相关联,因为我的一些视图需要指向不同的子域。请注意,所有的子域都使用完全相同的Django实例,所以我仍然在我的应用程序中引用本地视图。在某些情况下,我只需要将用户发送到不同的域。我考虑过sites框架,但还有其他因素阻止我使用它。解决方案似乎就在那里,但我有一个绊脚石。
我这样做:
urlpatterns += [
path("https://subdomain.mywebsite.com/", include("site.urls")),
]这项工作。但是,当我像这样生成URLS时:
<a href="{% url "somepage" %}">link</a>然后它就会引出:
<a href="/https://subdomain.mywebsite.com/record/">link</a>换句话说,在生成的URL前面有一个斜杠。除此之外,一切都运行得很好。我怎么才能摆脱它呢?
发布于 2020-07-02 19:53:01
让我们把它变成一个更具体的案例。假设我们使用一个帐户应用程序进行帐户管理,但是在一个集中的子域"auth.example.com“上。我们已经采取了所有步骤,通过在settings.py中设置适当的值,来确保会话和CSRF cookie在我们的主站点"www.example.com“上是可读的。此外,我们可以通过将REDIRECT_AUTH_TO_AUTH_SUBDOMAIN设置为False来关闭此行为。
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应该是:
urlpatterns = [
path("account/", include("account.urls"),
...
]模板中的反向链接不会有域名,而是简单地/account/login/,然后重定向到auth子域。
https://stackoverflow.com/questions/62631664
复制相似问题