2013-04-18 7 views
5

Je voudrais savoir comment on peut "appeler" une application à l'intérieur d'une application différente. Fondamentalement, j'ai, par exemple:Django: Comment intégrer une application dans une autre application

  • une application de calendrier qui fait un certain processus pour rendre un calendrier en html
  • une application « Main » qui montre le index.html d'un site

Je voudrais que l'application principale appelle l'application Calendrier et insère ce qu'elle affiche dans la barre latérale.

L'infrastructure CodeIgniter par exemple peut gérer cela. Un contrôleur peut invoquer un autre contrôleur, enregistrer ce qu'il renvoie (la sortie html) dans une variable, et finalement inclure cette variable dans le contexte qui sera utilisé pour rendre le fichier html final.

Est-ce possible avec Django? Merci

Répondre

4

Eh bien, je pense que je peux trouver une solution. Je suis nouveau sur Django, donc je ne sais pas si c'est un bon moyen de le faire, s'il casse des règles conventionnelles, s'il ouvre un trou de sécurité, ou si simplement, il y a d'autres méthodes, mais ça marche Donc, j'ai créé mon application Calendrier, et mon application Afficher. Je veux Afficher pour appeler Calendrier, affichez son modèle, puis insérez le résultat dans un modèle de Afficher.

Pour ce faire, j'utilisé TemplateResponse au lieu de HttpResponse du côté du calendrier:

# Calendar view 

from django.template.response import TemplateResponse 

def render_calendar(request): 
    return TemplateResponse(request, 'calendar/calendar-template.html', {}) 

Puis sur le côté Show, obtenez l'instance TemplateResponse, invoquez sa méthode render(), et enfin insérer la rendered_content à l'intérieur du contexte:

# Show view 

from calendar import views 

def show(request, show_id): 
    cal = views.render_calendar(request) 
    cal.render() 
    context = {"calendar": cal.rendered_content} 
    return render_to_response("show/show-template.html", context) 

Et cela fait l'affaire!

0

Trier de ...

Il y a une étiquette de modèle {% ssi %} qui vous permet d'inclure un modèle dans un autre, la seule chose est que vous devrez passer le modèle parent toutes les variables de contexte nécessaires dans le autre modèle.

+0

ouais .. le fait est que mes "side-apps" (widget-like) sont très indépendants, et je ne veux pas gérer toutes les variables de toutes les applications en un seul endroit. – Firas

+0

@Firas Je ne suis pas au courant d'une autre façon, désolé, peut-être quelqu'un d'autre saura ... – Ngenator

+0

Thx de toute façon, je l'apprécie – Firas

Questions connexes