2011-11-16 27 views
6

Supongo que tengo una pregunta simple sobre la mejor organización del código.Múltiples aplicaciones de django en una vista

Digamos que tengo varias aplicaciones que también implementan cómo se deben representar estas aplicaciones en la capa de presentación.

Estoy tratando de entender cómo organizar el código si necesito presentar varias aplicaciones en una página sin usar marcos por supuesto.

Ejemplo rápido: supongamos que tengo dos aplicaciones (app1 y app2) que implmeneting su modelo correspondiente y vistas. Ahora necesito que mi página de índice contenga la presentación de estas dos vistas. ¿Cómo puedo implementar la vista genérica que todavía utiliza las vistas de la aplicación en lugar de ir directamente a sus modelos? Preferiría que mi aplicación controle su vista aún.

Gracias

Respuesta

5

creo que se puede usar render_to_string acceso directo Así, en las vistas de aplicación se pone:

render_to_string(somestuff) # instead of render() or render_to_responce() 

y luego en el índice de vista algo como esto:

render(request, 'index.html', {'block1': view1(request), 'block2': view2(request)}) 

PS: También después de escribir esto, no se ve muy bien (se veía mejor en mi cabeza :)).

+0

Señores, les pido disculpas por la demora para agradecerles a ambos, Balazs y Pill por sus sugerencias sólidas. Si bien creo que ambos son sólidos, iré con la respuesta de Pill, ya que parece ser suficiente para mis necesidades. – user1039384

+0

Además, para darle más ideas sobre por qué me gusta esto un poco más de la respuesta anterior: Si bien el uso principal es tan simple como escribir un CSS que define la ubicación de block1 y block2 y luego en plantilla, use el {{block1} } y {{block2}} en los divs correspondientes, el otro valor es que la clase de la aplicación también puede usar ese método para generar su propia plantilla, si es necesario, que solo presente la información para esa aplicación. Entonces la lógica estará ligada a cada representación que quiera decidir dónde mostrar la aplicación y la aplicación será responsable de la representación real de sus datos. Gracias de nuevo – user1039384

3

Gran pregunta, te digo cómo lo hice.

Utilicé etiquetas de plantilla personalizadas (específicas de la aplicación). Estas etiquetas de plantilla ponen cosas adicionales en el contexto, lo que puedes usar en tus plantillas. Puede leer más sobre docs sobre etiquetas de plantilla personalizadas.

Hay un buen libro, Practical django Projects 2nd edition, que está un poco desactualizado, creo, pero te da una gran idea de la organización del proyecto.

Cuestiones relacionadas