diff --git a/readthedocs/core/middleware.py b/readthedocs/core/middleware.py index d62d93b1702..6c30d309b04 100644 --- a/readthedocs/core/middleware.py +++ b/readthedocs/core/middleware.py @@ -22,7 +22,7 @@ class SubdomainMiddleware(MiddlewareMixin): """Middleware to display docs for non-dashboard domains.""" - def process_request(self, request): + def process_request(self, request, subproject_slug=None): """ Process requests for unhandled domains. @@ -33,11 +33,21 @@ def process_request(self, request): if not settings.USE_SUBDOMAIN: return None + if subproject is None and subproject_slug: + try: + rel = ProjectRelationship.objects.get( + parent=kwargs['project'], + alias=subproject_slug, + ) + subproject = rel.child + except (ProjectRelationship.DoesNotExist, KeyError): + subproject = get_object_or_404(Project, slug=subproject_slug) + full_host = host = request.get_host().lower() path = request.get_full_path() log_kwargs = dict(host=host, path=path) public_domain = settings.PUBLIC_DOMAIN - + if public_domain is None: public_domain = settings.PRODUCTION_DOMAIN if ':' in host: diff --git a/readthedocs/redirects/utils.py b/readthedocs/redirects/utils.py index d14d512b7fc..286661102d0 100644 --- a/readthedocs/redirects/utils.py +++ b/readthedocs/redirects/utils.py @@ -52,7 +52,7 @@ def project_and_path_from_request(request, path): project = Project.objects.get(slug=project_slug) except Project.DoesNotExist: return None, path - return project, path + return project, path, project_slug def language_and_version_from_path(path):