Comment puis-je mettre un bloc de contenu généré dynamiquement dans un modèle Django?

StackOverflow https://stackoverflow.com/questions/1024220

  •  06-07-2019
  •  | 
  •  

Question

Je souhaite inclure des éléments tels que le statut Twitter ou de délicieuses balises dans mes modèles Django.

Ces choses sont dynamiques, mais régulières. Comment cela serait-il fait?

Était-ce utile?

La solution

Il existe plusieurs façons de gérer cela. Vous pouvez donc choisir la méthode qui correspond le mieux à votre style ou à vos exigences:

  1. Variable de contexte de modèle : comme indiqué par Alex, vous pouvez placer votre contenu dans une variable de contexte incluse dans le contexte de chaque modèle créé par chaque vue. Django fournit même un mécanisme pour le faire automatiquement, appelé processeur de contexte . Avantages: très simple. Inconvénients: ne pas actualiser dynamiquement le nouveau contenu sur les navigateurs clients.

  2. Chargement dynamique AJAX : comme mentionné par Alex et Dave, vous pouvez charger dynamiquement votre contenu à l'aide de méthodes AJAX. Par exemple, avec jQuery, vous devez placer un espace réservé dans votre modèle, par exemple <div id="twitterfeed"></div>, puis dans un bloc javascript dans votre modèle, mettre $("#twitterfeed").load("{% url twitterfeed %}");twitterfeed est une URL nommée dans votre urls.py. Avantages: mettra à jour dynamiquement les navigateurs. Inconvénients: peut être compliqué si vous ne connaissez pas le Javascript.

  3. Balise d'inclusion : Django fournit un type de balise de modèle appelé balise d'inclusion , qui est essentiellement une balise de modèle personnalisée pouvant afficher du contenu dynamique. D'une certaine manière, cela ressemble à une variable de contexte, sauf que votre code pour générer le contenu ne sera appelé que lorsque vous utilisez la balise de modèle personnalisé dans votre modèle au lieu d'être appelée pour chaque vue. Un autre avantage est que le contenu est généré à partir d'un modèle qui lui est propre. Vous pouvez le faire avec une variable de contexte normale, bien sûr, mais ce n'est pas aussi propre (IMHO) que d'utiliser une balise d'inclusion. Avantages: très simple, propre. Inconvénients: ne pas actualiser dynamiquement le nouveau contenu sur les navigateurs clients.

Autres conseils

La méthode la plus simple consiste à utiliser {{ mycontent }} dans votre modèle (où vous souhaitez que le contenu généré de manière dynamique apparaisse) et à placer la correspondance entre mycontent et sa valeur dans le contexte que vous utilisez pour générer le modèle - c.-à-d. la partie la plus fondamentale de la modélisation de django.

Si vous voulez dire que vous souhaitez une prise en charge d'Ajax dans laquelle Javascript sur la page actualise en permanence ce contenu en fonction de ce que le serveur souhaite qu'il soit, je suggère d'explorer dojango , le projet d'intégration Dojo / Django - il n'est pas encore aussi mature que Dojo et Django sont des projets à part (pas la version). 0.4 encore), mais il est déjà utilisable et utile.

Une technique courante consiste à laisser un espace réservé div dans le contenu généré, puis à le renseigner côté client via un appel AJAX à partir de Javascript que vous avez inclus dans la page.

Cela vous donne l’avantage d’avoir une page primaire cacheable (chargement rapide), avec des bits dynamiques séparés. Selon la durée de vie des bits dynamiques, vous pouvez même les mettre en cache pour des durées plus courtes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top