2017-10-12 1 views
1

J'ai deux applications django. Un qui appartient au code de base et une application contrib. Ce que je dois faire est d'afficher un modèle dans mon application contrib, qui existe déjà dans l'application de base. Ceci est plus ou moins la structure du dossier:Utilisez le modèle d'une autre application django dans une autre application

  • projet django
    • app noyau
      • templates ...
    • app contrib
      • Modèles - template_fro m_core_app

Le modèle rend les données à partir de points de vue et des formes qui existent dans l'application de base. Je me demande quelle est la meilleure façon de faire quelque chose comme ça.

+2

Il ne devrait pas y avoir de problème ici: les modèles ne "appartiennent" pas aux applications d'une manière autre que d'être dans leurs répertoires de fichiers. –

Répondre

1

Oui, vous pouvez le faire, en utilisant include

core_app/ 
    templates/ 
     core_app/ 
      page1.html 
contrib_app/ 
    templates/ 
     contrib_app/ 
      page1.html 
      page2.html 

{% include "core_app/page1.html" %} or {% include "contrib_app/page1.html" %}

Vous pouvez également consulter ce document Template

+1

pour éviter les conflits de noms, c'est pourquoi le même nom a été utilisé dans 'templates' – Sanket

1

Étant donné que vous utilisez render() raccourci dans contrib.views, vous Il suffit de charger le modèle à partir de l'application principale et assurez-vous que le contexte var satisfait ce que le modèle principal rend. Si vous fournissez le chemin comme « coreapp/template.html » le get_context() Modèle Loader Backend trouverez trouver le modèle correct étant donné qu'il est correctement configuré:

settings.py: Set APP_DIRS=True dans le dictionnaire TEMPLATE. Django recherchera des modèles dans chaque application via les fonctions get_template() et select_template().

contrib.views.py

from django.http import HttpResponse 
from django.template import loader 

def index(request): 
    ... 
    template = loader.get_template('coreapp/template.html') 
    context = { 
     'core_template_var': core_template_var, 
     ... 
    } 
    return HttpResponse(template.render(context, request)) 

Lectures Recommandées:

render(): https://docs.djangoproject.com/en/1.11/topics/http/shortcuts/#render

chargement du modèle: https://docs.djangoproject.com/en/1.11/topics/templates/#template-loading

Note: Que vous pouvez également utiliser un modèle de repli avec select_template() au lieu de get_template(). select_template() prend une liste et essaie tour à tour chaque chemin du template, en retournant le premier qui existe.