Pregunta

Tengo dos sitios estrechamente relacionados, un sitio principal y un sitio móvil, organizada como una aplicación de Django. Ellos tienen una gran cantidad de la misma funcionalidad y necesidad de acceso a los mismos datos. La principal diferencia es las plantillas serán diferentes y la forma en que el sitio está estructurado será diferente.

tengo dos máquinas virtuales separadas, una para cada uno (aunque yo no tengo que hacerlo de esa manera). Mi primer pensamiento fue que el marco sitios Django ayuda a resolver esto, pero no parece que la documentación para describir mi caso de uso.

Alguien me puede dar una pista para saber si estoy en el camino correcto? El urls.py tendrá que ser diferente, ya que, por ejemplo, la página es completamente diferente entre las aplicaciones. La meta principal es que para los datos de las dos aplicaciones diferentes para ser compartidos y no tiene que ser duplicado el código para manejar eso.

Desde el sitio principal:

  • El usuario envía un artículo que se almacena en el modelo

Desde el sitio móvil:

  • usuario visualiza una lista de elementos y ver el se acaba de introducir en el sitio principal
  • El usuario da una calificación de 5 estrellas en el elemento añadido recientemente

Desde el sitio principal:

  • El usuario ve una lista de elementos de alta calificación y el artículo recientemente agregado (que ahora tiene una calificación alta) aparece en la lista.
¿Fue útil?

Solución 2

De acuerdo, ambas respuestas son grandes y han contribuido a lo que elegí para mi solución final.

En el archivo settings.py hay una opción llamada ROOT_URLCONF. He creado dos archivos settings.py, llamado settings_desktop.py y settings_mobile.py y en cada uno de ellos utiliza el siguiente código:

from settings.py import *

ROOT_URLCONF = 'myapp.urls_mobile'

(o en el caso del escritorio, myapp.urls_desktop)

En realidad, esto da mucho que despliega tales como ser capaz de utilizar diferentes directorios de plantillas para cada sitio, aunque en realidad no voy a hacer eso.

A continuación, he creado dos versiones del archivo wsgi donde la única diferencia fue la siguiente línea:

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

o

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

En cada una de las máquinas virtuales, la única diferencia es la línea que WSGIScriptAlias ??puntos a los diferentes archivos wsgi para cada huésped.

Esto me permitió utilizar con eficacia una aplicación Django que podrían acomodar fácilmente a ambos sitios.

Gracias para poder planear una buena solución para esto.

Otros consejos

Tener un vistazo a esta respuesta a una pregunta similar . Básicamente, puedes usar los mismos puntos de vista y simplemente volver plantillas diferentes en función del agente de usuario. También, si la estructura lógica de la aplicación para que se divide en diferentes "aplicaciones" en términos de Django, a continuación, puede volver a utilizarlos si necesita diferentes flujos con componentes similares. Esperemos que esto le pone fuera de funcionamiento.

ACTUALIZACIÓN:

Así que digamos que usted tiene su sitio principal http://www.mainsite.com/ que tiene su propio models.py urls.py y views.py que hace que su funcionalidad para el sitio principal. Entonces usted tiene http://www.m.mainsite.com/ que tiene su propio conjunto de URLs y vistas. A continuación, sólo puede importar modelos del sitio principal y los utilizan en las vistas de sitios móviles.

hice algo muy similar una vez. Mi forma de resolver este problema de urls.py múltiple fue algo como esto:

Crea dos URLconf, uno para cada sitio;

Crear un nuevo 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

Comprobar la razón por la que tiene que hacer las href="http://docs.djangoproject.com/en/dev/topics/cache/#using-vary-headers" patch_vary_headers en el docs .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top