2009-10-19 5 views
3

J'ai un texte statique qui doit apparaître à 2 endroits dans un modèle.Comment puis-je tarir un texte commun dans un modèle Django?

Par exemple:

<div> 
{% if something %} 
    This is a static text 
{% else %} 
    Something else happened 
{% endif %} 
</div> 
... more html 
<span> 
{% if something %} 
    This is a static text 
{% else %} 
    Something else happend 
{% endif %} 
</span> 
  1. je peux faire ce qui précède en dupliquant le texte ci-dessus à 2 endroits différents dans mon fichier de modèle (comme indiqué ci-dessus).
  2. Je pourrais aussi créer un modèle qui permet de stocker le texte (Ceci est sec, mais le coût d'un appel à la base de données pour une tâche simple)
  3. Je pense à l'aide include template mais c'est probablement pas la meilleure façon de réaliser mon objectif.

Quelle est la meilleure façon de le faire?

+1

Utiliser 'include' regarde deux fois bon pour moi. – Alasdair

Répondre

7

certainement utiliser Tags: inclusion

http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

Le fichier tag serait soit quelque chose de super simple comme tout le texte « Ceci est un texte statique » ou le bloc entier:

{% if something %} 
This is a static text 
{% else %} 
Something else happened 
{% endif %} 

« quelque chose » peut être passé comme une variable à l'étiquette de modèle afin que vous peut utiliser ce bloc entier de manière variable.

0

Je dispose d'un fichier comme propriétés Java que j'utilise pour toutes mes chaînes de ressources. Je sers juste celui que je veux. Garder ceux-ci dans un endroit rend également la traduction facile.

Ex .:

welcome_msg="hello user!" 
thank_you="thank you" 
goodbye_msg="goodbye, " + thank_you 
2

Il y a plusieurs façons, mais cela dépend probablement de ce que le texte est et à quelle fréquence il sera utilisé. Il est difficile de recommander un choix spécifique sans plus de détails

  1. Créer un custom template tag (celui-ci est le plus logique en fonction de la façon dont vous avez décrit votre problème ci-dessus).
  2. Créez un modèle de base contenant le texte à l'emplacement correct puis héritez de celui-ci pour vos "2 emplacements"
  3. Placez le texte statique dans un fichier de paramètres et transmettez-le au générateur de rendu de modèle via Contexte (probablement pas la meilleure idée, mais en fonction de ce que vous faites, il pourrait être une possibilité)
4

J'utilise le django internationalization pour cela. Donc, dans mes applications/modèles, je viens d'écrire la clé, et dans les fichiers .po est la valeur des clés.

{% load i18n %} 

<div> 
{% if something %} 
    {% trans "static" %} 
{% else %} 
    {% trans "something else" %} 
{% endif %} 
</div> 

Et dans mon fichier .po:

msgid "static" 
msgstr "This is a static text" 

msgid "something else" 
msgstr "Something else happened 

En plus utile pour plusieurs langues, il est beaucoup plus facile pour l'écriture de copie juste au cas où vous voulez changer à l'avenir parce que vous pouvez juste regarder à un fichier au lieu de parcourir plusieurs modèles.

2

Vous pouvez utiliser flatblocks: http://github.com/zerok/django-flatblocks

ou des morceaux: http://code.google.com/p/django-chunks/

Celles-ci pourraient être surpuissant pour votre problème, car ils stockent vos extraits dans la base de données, mais ils ajoutent l'avantage de permettre d'éditer eux via l'admin.

{% load chunks %} 
<div> 
{% if something %} 
    {% chunk "something" %} 
{% else %} 
    {% chunk "something_else" %} 
{% endif %} 
</div> 

Il y a beaucoup de fourches ou de projets similaires, par exemple:

0

Si le texte inclus s'agrandit, utilisez une balise "include".

{% include "myapp/helptext.html" %}

GrtzG

Questions connexes