2010-01-13 20 views
16

Entonces en mi proyecto Django tengo algunas aplicaciones diferentes, cada una con sus propios Modelos, Vistas, Plantillas, etc. ¿Cuál es una buena manera (la forma "Django") de comunicar estas aplicaciones?¿Usar modelos django en todas las aplicaciones?

Un ejemplo específico sería una aplicación de reuniones que tiene un modelo para reuniones, y tengo una aplicación de inicio en la que quiero mostrar las 5 reuniones principales en la página de inicio.

¿La Vista de la aplicación de inicio solo debe consultar el modelo de la aplicación Meetings?

Parece que está cruzando la línea y podría haber una forma más desacoplada para hacer cosas como esta en Django.

¡Cualquier ayuda es muy apreciada!

+0

posible duplicado de [Compartir modelos entre aplicaciones de Django] (http://stackoverflow.com/questions/4137287/sharing-models-between-django-apps) –

Respuesta

16

En algún punto, sus aplicaciones serán tendrán que acoplarse para realizar cualquier trabajo. No puedes soslayar eso.

+1

Sí, creo que sí. Gracias. –

1

¿La Vista de la aplicación de inicio solo debe consultar el modelo de la aplicación Meetings?

Sí, así es como se hace. Si realmente quieres desacoplar cosas, podrías hacer que tu aplicación Home use claves externas genéricas y algún tipo de sistema de plantilla genérico, pero no hay realmente una buena razón para hacerlo, a menos que tengas grandes planes para que tu aplicación de inicio sea conectable y trabaje con un montón de otras aplicaciones de Django diferentes.

Escribir aplicaciones Django fuertemente acopladas es realmente fácil, y escribir aplicaciones Django desacopladas es realmente difícil. No se desacople a menos que tenga una razón para hacerlo, y se ahorrará mucho trabajo (¡y felicidad!).

+5

"Escribir aplicaciones Django fuertemente acopladas es realmente fácil, y escribir aplicaciones Django desacopladas es realmente difícil" - Oigo lo que estás diciendo aquí ... "No te desconectes a menos que tengas una razón para hacerlo, y te ahorrarás un montón de trabajo "- ¿No va esto en contra de los principios de ingeniería de software de sonido de mantener los sistemas tan estrechamente acoplados (en primer lugar) como sea posible? –

0

sí. Creo que es una característica de diseño. Todos los modelos comparten un back-end, por lo que tendrías que hacer un trabajo extra para tener dos modelos con el mismo nombre en diferentes aplicaciones.

Los proyectos no deben compartir modelos

1

Si fuera yo, me gustaría hacer una etiqueta de plantilla en su aplicación reunión que produce la salida deseada y que lo incluya etiqueta de plantilla en la plantilla de aplicación en casa.

De esta manera solo los está acoplando en la parte Vista del MVC y lo hace más fácil de mantener si cambia los modelos en la aplicación de la reunión.

3

Para lograr la desvinculación tanto como sea posible,

Es necesario tener una aplicación específica del proyecto, que hace todas las cosas de conectar entre sí.

El uso de señales de modelos para crear modelos nuevos en aplicaciones desacopladas ayuda. Pero hacer demasiado de esto es una tontería.

Cuestiones relacionadas