несколько доменов - один проект django

Я хочу запустить один проект django на нескольких доменах / веб-сайтах. Каждым веб-сайтам необходимо получить доступ к уникальному «urls.py» / «views.py». Я уже пробовал это с помощью этого урока , но для меня это не работает. Есть ли способ сделать это с помощью промежуточного программного обеспечения простым способом (без инфраструктуры сайтов)? Немного помочь было бы действительно здорово. Благодарю.

Изменить: поскольку я пробовал это как в уроке выше, мой httpd.conf выглядел так:

ServerRoot "/home/webfactionusername/webapps/erdbeer/apache2"

LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module        modules/mod_dir.so
LoadModule env_module        modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module       modules/mod_mime.so
LoadModule rewrite_module    modules/mod_rewrite.so
LoadModule setenvif_module   modules/mod_setenvif.so
LoadModule wsgi_module       modules/mod_wsgi.so
LoadModule unixd_module      modules/mod_unixd.so

LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
CustomLog /home/webfactionusername/logs/user/access_erdbeer.log combined
ErrorLog /home/webfactionusername/logs/user/error_erdbeer.log

Listen 10414
KeepAlive Off
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 5
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5

WSGIDaemonProcess erdbeer processes=2 threads=12 python-path=/home/webfactionusername/webapps/erdbeer:/home/webfactionusername/webapps/erdbeer/myproject:/home/webfactionusername/webapps/erdbeer/lib/python2.7
WSGIProcessGroup erdbeer
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /home/webfactionusername/webapps/erdbeer/myproject/myproject/wsgi.py


# Virtual hosts setup
NameVirtualHost *
<VirtualHost *>
    ServerName mydomain123abc.de

    WSGIDaemonProcess erdbeer processes=5 python-path=/home/webfactionusername/webapps/erdbeer:/home/webfactionusername/webapps/erdbeer/lib/python2.7 threads=1
    WSGIScriptAlias / /home/webfactionusername/webapps/erdbeer/subdomain1.wsgi
</VirtualHost>

<VirtualHost *>
    ServerName seconddomain123.de

    WSGIDaemonProcess erdbeer processes=5 python-path=/home/webfactionusername/webapps/erdbeer:/home/webfactionusername/webapps/erdbeer/lib/python2.7 threads=1
    WSGIScriptAlias / /home/webfactionusername/webapps/erdbeer/subdomain2.wsgi
</VirtualHost>

Edit2: Я до сих пор не могу понять эту концепцию промежуточного программного обеспечения. Я только мог понять, как мне, вероятно, нужно использовать «process_request», но я не знаю, как будет выглядеть файл промежуточного программного обеспечения. Допустим, у меня есть «domain1.com» и «domain2.com», которые должны использовать эти URL-адреса:

domain1_urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.http import HttpResponse

urlpatterns = [
    url(r'^$', 'myapp1.views.home'),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^robots.txt$', lambda r: HttpResponse("User-agent: *
Disallow:", content_type="text/plain")),
]

domains2_urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.http import HttpResponse

urlpatterns = [
    url(r'^$', 'myapp2.views.home'),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^robots.txt$', lambda r: HttpResponse("User-agent: *
Disallow:", content_type="text/plain")),
]

Как использовать это в моем промежуточном программном обеспечении? (Я новичок ...)

python,django,django-views,

0

Ответов: 1


0

Я нашел решение отлично здесь .

# File: settings.py

HOST_MIDDLEWARE_URLCONF_MAP = {
    # Control Panel
    "www.example.com": "webapp.sites.example.urls",
}

а также

# File: multihost.py

import time
from django.conf import settings
from django.utils.cache import patch_vary_headers

class MultiHostMiddleware:

    def process_request(self, request):
        try:
            request.META["LoadingStart"] = time.time()
            host = request.META["HTTP_HOST"]
            #if host[-3:] == ":80":
            #    host = host[:-3] # ignore default port number, if present

            # best way to do this.
            host_port = host.split(':')
            if len(host_port)==2:                    
                host = host_port[0] 

            if host in settings.HOST_MIDDLEWARE_URLCONF_MAP:
                request.urlconf = settings.HOST_MIDDLEWARE_URLCONF_MAP[host]
                request.META["MultiHost"] = str(request.urlconf)
            else:
                request.META["MultiHost"] = str(settings.ROOT_URLCONF)

        except KeyError:
            pass # use default urlconf (settings.ROOT_URLCONF)

    def process_response(self, request, response):
        if 'MultiHost' in request.META:
            response['MultiHost'] = request.META.get("MultiHost")

        if 'LoadingStart' in request.META:
            _loading_time = time.time() - int(request.META["LoadingStart"])
            response['LoadingTime'] = "%.2fs" % ( _loading_time, )

        if getattr(request, "urlconf", None):
            patch_vary_headers(response, ('Host',))
        return response
Python, Django, Django-просмотры,
Похожие вопросы