Frage

Ich habe zwei eng verwandte Seiten, eine Haupt-Website und eine mobile Website, als django app gehostet. Sie werden eine Menge von der gleichen Funktionalität und Notwendigkeit, den Zugang haben die gleichen Daten. Der Hauptunterschied ist die Vorlagen anders sein werden und die Art und Weise die Website strukturiert ist, anders sein wird.

Ich habe zwei separate virtuelle Hosts, einen für jeden (obwohl ich muß es nicht tun, dass die Art und Weise). Mein erster Gedanke war, dass der Django Websites Rahmen dieses Problem zu lösen hilft, aber die docs scheint nicht meinen Anwendungsfall zu beschreiben.

Kann jemand mir einen Tip geben zu wissen, ob ich auf dem richtigen Weg bin? Die urls.py müssen, anders sein, da zum Beispiel, ist die Homepage völlig unterschiedlich zwischen den Anwendungen. Das Hauptziel besteht darin, dass für die Daten in den beiden verschiedenen Anwendungen gemeinsam genutzt werden und der Code, dass die Verwaltung nicht dupliziert werden muß.

Von der Haupt-Website:

  • Benutzer trägt ein Element, das im Modell
gespeichert ist,

Von der mobilen Website:

  • Benutzer eine Liste von Elementen betrachtet und sehen Sie die man nur auf der Hauptseite eingegeben
  • User gibt eine 5-Sterne-Bewertung auf das kürzlich hinzugefügte Elemente

Von der Haupt-Website:

  • User eine Liste von hoch bewerteten Produkten und die zuletzt hinzugefügten Artikel (die jetzt eine hohe Bewertung hat) zeigt auf der Liste nach oben.
War es hilfreich?

Lösung 2

OK, beide Antworten sind groß und trugen zu dem, was ich für meine endgültige Lösung gewählt haben.

In der settings.py Datei gibt es eine Option namens ROOT_URLCONF. Ich habe zwei settings.py Dateien, genannt settings_desktop.py und settings_mobile.py und in jedem dieser verwendet den folgenden Code:

from settings.py import *

ROOT_URLCONF = 'myapp.urls_mobile'

(oder im Fall von dem Desktop, myapp.urls_desktop)

Das gibt tatsächlich eine Menge coole Features wie die Lage, für jede Website andere Vorlage Verzeichnisse verwendet werden, wenn auch wirklich bin ich nicht, dass tun wird.

Dann habe ich zwei Versionen der wsgi Datei, wo der einzige Unterschied war diese Zeile:

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_mobile'

oder

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_desktop'

In jedem der virtuellen Hosts der einzige Unterschied ist die WSGIScriptAlias ??Linie, die Punkte auf die verschiedenen wsgi Datei für jeden Host.

Die erlaubte mir, effektiv eine verwenden django app, die leicht beiden Standorte aufnehmen könnte.

Vielen Dank für die Arbeit eine gute Lösung dieses Problems zu helfen.

Andere Tipps

Hier finden Sie aktuelle diese Antwort auf eine ähnliche Frage . Grundsätzlich können Sie nur die gleichen Ansichten verwenden und nur verschiedene Vorlagen zurückkehren basierend auf dem User-Agent. Auch wenn Sie Ihre Anwendungslogik so strukturieren, dass sie in unterschiedliche „Apps“ aufgebrochen ist in django Bedingungen, dann können Sie sie wiederverwenden, wenn Sie verschiedene Strömungen mit ähnlichen Komponenten benötigen. Hoffentlich bekommt man ab und ausgeführt wird.

UPDATE:

kann also sagen, Sie haben Ihre Haupt-Website http://www.mainsite.com/ die hat es ist eigene urls.py models.py und views.py, die Ihre Funktionalität für den Hauptstandort macht. Dann haben Sie http://www.m.mainsite.com/ die hat einen eigenen Satz von Urls und Ansichten. Dann können Sie einfach Hauptstandort Modelle importieren und sie in den mobilen Websites Ansichten.

Ich habe etwas sehr ähnlich einmal. Mein Weg, um dieses Problem von mehreren urls.py der Lösung war so etwas wie folgt aus:

Erstellen Sie zwei URLconf, eine für jede Seite;

Erstellen

eine neue Middleware:

from django.utils.cache import patch_vary_headers

class DomainMiddleware:

    def __init__(self):
        pass

    def process_request(self, request):

        #avoid problems when reaching the server directly trough IP
        host = request.META.get('HTTP_HOST', None)
        if host is None: return

        host = host.split(':')[0] #remove port number

        if host is mobile:
            urlconf = "mobile.urls"
        else:
            urlconf = "default.urls"

        request.urlconf = urlconf

    def process_response(self, request, response):
        patch_vary_headers(response, ('Host',))
        return response

Überprüfen Sie auch, warum Sie tun müssen, um die patch_vary_headers auf die docs .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top