Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

article.md 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. title: Le langage de template Django : Pour les auteurs de templates
  2. slug: le-langage-de-template-django-pour-les-auteurs-de-templates
  3. date: 2006-08-15 18:46:48
  4. type: post
  5. vignette: images/logos/django.png
  6. contextual_title1: Comparaison de TurboGears et Django, deux frameworks web Python
  7. contextual_url1: 20060715-comparaison-de-turbogears-et-django-deux-frameworks-web-python
  8. contextual_title2: Rédaction de votre première appli Django, partie 4 : Conception d'un formulaire et vues génériques
  9. contextual_url2: 20060617-redaction-de-votre-premiere-appli-django-partie-4-conception-d-un-formulaire-et-vues-generiques
  10. contextual_title3: Rédaction de votre première appli Django, partie 3 : Création des vues de l'interface publique
  11. contextual_url3: 20060617-redaction-de-votre-premiere-appli-django-partie-3-creation-des-vues-de-l-interface-publique
  12. <p>Le langage de template Django a été conçu dans l'idée d'être un bon compromis
  13. entre puissance et facilité. Il est facilement accessible aux personnes ayant
  14. l'habitude de travailler avec du HTML. Si vous avez déjà utilisé un autre
  15. langage de template, comme <a class="reference" href="http://smarty.php.net/">Smarty</a> ou <a class="reference" href="http://www.cheetahtemplate.org/">CheetahTemplate</a>, vous n'aurez aucune
  16. difficulté à adopter les templates Django.</p>
  17. <div class="section">
  18. <h1><a id="templates" name="templates">Templates</a></h1>
  19. <p>Un template est un simple fichier texte. Il peut générer n'importe quel type de
  20. fichier texte (HTML, XML, CSV, etc).</p>
  21. <p>Un template contient des <strong>variables</strong> qui seront remplacées par leurs valeurs
  22. lors de son évaluation et des <strong>tags</strong> qui controlent la logique du template.</p>
  23. <p>Ci-dessous un template minimal qui illustre les bases. Chaque élément sera
  24. expliqué plus tard dans ce document.:</p>
  25. <pre class="literal-block">
  26. {% extends &quot;base_generic.html&quot; %}
  27. {% block title %}{{ section.title }}{% endblock %}
  28. {% block content %}
  29. &lt;h1&gt;{{ section.title }}&lt;/h1&gt;
  30. {% for story in story_list %}
  31. &lt;h2&gt;
  32. &lt;a href=&quot;{{ story.get_absolute_url }}&quot;&gt;
  33. {{ story.headline|upper }}
  34. &lt;/a&gt;
  35. &lt;/h2&gt;
  36. &lt;p&gt;{{ story.tease|truncatewords:&quot;100&quot; }}&lt;/p&gt;
  37. {% endfor %}
  38. {% endblock %}
  39. </pre>
  40. <div class="admonition-philosophie admonition">
  41. <p class="first admonition-title">Philosophie</p>
  42. <p>Pourquoi utiliser un template au format texte et non au format XML (comme
  43. celui du TAL Zope) ? Nous voulions que le langage de template puisse être
  44. utilisé pour plus que des templates XML/HTML. À World Online, nous
  45. l'utilisons pour les mails, la JavaScript et le CSV. Vous pouvez utiliser le
  46. langage de template pour tout format basé sur du texte.</p>
  47. <p class="last">Oh, encore un truc : Rendre du XML éditable par les humains est sadique !</p>
  48. </div>
  49. </div>
  50. <div class="section">
  51. <h1><a id="variables" name="variables">Variables</a></h1>
  52. <p>Les variables ressemblent à <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">variable</span> <span class="pre">}}</span></tt>. Lorsque le moteur de template
  53. rencontre une variable, il évalue cette variable et la remplace par son
  54. résultat.</p>
  55. <p>Utilisez un point (<tt class="docutils literal"><span class="pre">.</span></tt>) pour accéder aux attributs d'une variable.</p>
  56. <div class="admonition-en-coulisses admonition">
  57. <p class="first admonition-title">En coulisses</p>
  58. <p>Techniquement, lorsque le système de template rencontre un point, il
  59. effectue les recherches suivantes, dans cet ordre :</p>
  60. <blockquote class="last">
  61. <ul class="simple">
  62. <li>Dictionaire</li>
  63. <li>Attribut</li>
  64. <li>Appel de méthode</li>
  65. <li>Index de liste</li>
  66. </ul>
  67. </blockquote>
  68. </div>
  69. <p>Dans le précédent exemple, <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">section.title</span> <span class="pre">}}</span></tt> sera remplacé par l'attribut
  70. <tt class="docutils literal"><span class="pre">title</span></tt> de l'objet <tt class="docutils literal"><span class="pre">section</span></tt>.</p>
  71. <p>Si vous utilisez une variable qui n'existe pas, le système de template va
  72. insérer la valeur contenue dans le paramètre <tt class="docutils literal"><span class="pre">TEMPLATE_STRING_IF_INVALID</span></tt> qui
  73. correspond par défaut à <tt class="docutils literal"><span class="pre">''</span></tt> (chaîne vide).</p>
  74. <p>Lisez <a class="reference" href="#utiliser-les-r-f-rences-incluses">Utiliser les références incluses</a>, ci-dessous, pour vous aider à
  75. connaître les variables disponibles pour un template donné.</p>
  76. </div>
  77. <div class="section">
  78. <h1><a id="filtres" name="filtres">Filtres</a></h1>
  79. <p>Vous pouvez modifier des variables lors de l'affichage en utilisant des
  80. <strong>filtres</strong>.</p>
  81. <p>Les filtres ressemblent à <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">name|lower</span> <span class="pre">}}</span></tt>. Ceci affiche la valeur de la
  82. variable <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">name</span> <span class="pre">}}</span></tt> après avoir été filtrée par le filtre <tt class="docutils literal"><span class="pre">lower</span></tt>, qui
  83. convertit un texte en minuscule. Utilisez un pipe (<tt class="docutils literal"><span class="pre">|</span></tt>) pour appliquer un
  84. filtre.</p>
  85. <p>Les filtres peuvent « s'enchaîner ». La sortie d'un filtre est l'entrée du
  86. suivant. <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">text|escape|linebreaks</span> <span class="pre">}}</span></tt> est souvent utilisé pour échapper le
  87. contenu d'un texte et convertir ensuite les sauts de lignes en tags <tt class="docutils literal"><span class="pre">&lt;p&gt;</span></tt>.</p>
  88. <p>Certains filtres possèdent des arguments. Un argument de filtre ressemble à :
  89. <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">bio|truncatewords:&quot;30&quot;</span> <span class="pre">}}</span></tt>. Cela va afficher les 30 premiers mots de la
  90. variable <tt class="docutils literal"><span class="pre">bio</span></tt>. Les arguments de filtres sont toujours entre double quotes.</p>
  91. <p>La <a class="reference" href="#r-f-rence-des-filtres-inclus">Référence des filtres inclus</a> ci-dessous décrit l'ensemble des ces filtres.</p>
  92. </div>
  93. <div class="section">
  94. <h1><a id="tags" name="tags">Tags</a></h1>
  95. <p>Les tags ressemblent à : <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">tag</span> <span class="pre">%}</span></tt>. Les tags sont plus compliqués que les
  96. variables : certains génèrent une sortie de texte, d'autres contrôlent le flux
  97. grâce aux boucles ou à la logique, et certains chargent des informations
  98. externes dans le template pouvant être utilisées par la suite.</p>
  99. <p>Certains tags requièrent des tags de début et de fin (càd.
  100. <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">tag</span> <span class="pre">%}</span> <span class="pre">...</span> <span class="pre">contenu</span> <span class="pre">du</span> <span class="pre">tag</span> <span class="pre">...</span> <span class="pre">{%</span> <span class="pre">endtag</span> <span class="pre">%}</span></tt>). La
  101. <a class="reference" href="#r-f-rence-des-tags-inclus">Référence des tags inclus</a> ci-dessous décris l'ensemble de ces tags. Vous
  102. pouvez écrire vos propres tags si vous connaissez le Python.</p>
  103. </div>
  104. <div class="section">
  105. <h1><a id="h-ritage-des-templates" name="h-ritage-des-templates">Héritage des templates</a></h1>
  106. <p>La plus intéressante -- mais aussi la plus complexe -- partie du moteur de
  107. template de Django est l'héritage. L'héritage des templates vous permet de
  108. construire un template « squelette » de base contenant tous les éléments usuels
  109. de votre site et définissant des blocs que les templates enfants pourront
  110. écraser et/ou compléter.</p>
  111. <p>Il est plus simple, pour comprendre l'héritage des templates, de commencer par
  112. un exemple:</p>
  113. <pre class="literal-block">
  114. &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
  115. &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
  116. &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
  117. &lt;head&gt;
  118. &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&gt;
  119. &lt;title&gt;{% block title %}Mon super site{% endblock %}&lt;/title&gt;
  120. &lt;/head&gt;
  121. &lt;body&gt;
  122. &lt;div id=&quot;sidebar&quot;&gt;
  123. {% block sidebar %}
  124. &lt;ul&gt;
  125. &lt;li&gt;&lt;a href=&quot;/&quot;&gt;Accueil&lt;/a&gt;&lt;/li&gt;
  126. &lt;li&gt;&lt;a href=&quot;/blog/&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt;
  127. &lt;/ul&gt;
  128. {% endblock %}
  129. &lt;/div&gt;
  130. &lt;div id=&quot;content&quot;&gt;
  131. {% block content %}{% endblock %}
  132. &lt;/div&gt;
  133. &lt;/body&gt;
  134. </pre>
  135. <p>Ce template, que nous appelerons <tt class="docutils literal"><span class="pre">base.html</span></tt>, définit un simple squelette HTML
  136. que vous pouvez utiliser pour une page à deux colonnes. C'est le boulot des
  137. templates « enfants » de compléter les blocs vides avec du contenu.</p>
  138. <p>Dans cet exemple, le tag <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">block</span> <span class="pre">%}</span></tt> définit trois blocs que les templates
  139. enfants peuvent compléter. Tout ce que les tags <tt class="docutils literal"><span class="pre">block</span></tt> font c'est d'indiquer
  140. au moteur de template qu'un template enfant peut écraser ces parties du
  141. template.</p>
  142. <p>Un template enfant pourrait ressembler à ça:</p>
  143. <pre class="literal-block">
  144. {% extends &quot;base.html&quot; %}
  145. {% block title %}Mon super blog{% endblock %}
  146. {% block content %}
  147. {% for entry in blog_entries %}
  148. &lt;h2&gt;{{ entry.title }}&lt;/h2&gt;
  149. &lt;p&gt;{{ entry.body }}&lt;/p&gt;
  150. {% endfor %}
  151. {% endblock %}
  152. </pre>
  153. <p>Le tag <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">extends</span> <span class="pre">%}</span></tt> est la clé ici. Il indique au moteur de template que ce
  154. template « étend » un autre template. Lorsque le système de template évalue ce
  155. template, il commence par localiser le parent -- dans notre cas, « base.html ».</p>
  156. <p>À ce moment, le moteur de template va tenir compte des trois tags
  157. <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">block</span> <span class="pre">%}</span></tt> dans <tt class="docutils literal"><span class="pre">base.html</span></tt> et remplacer ces blocs avec le contenu du
  158. template enfant. En fonction de la valeur de <tt class="docutils literal"><span class="pre">blog_entries</span></tt>, la sortie devrait
  159. être proche de:</p>
  160. <pre class="literal-block">
  161. &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
  162. &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
  163. &lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
  164. &lt;head&gt;
  165. &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&gt;
  166. &lt;title&gt;Mon super blog&lt;/title&gt;
  167. &lt;/head&gt;
  168. &lt;body&gt;
  169. &lt;div id=&quot;sidebar&quot;&gt;
  170. &lt;ul&gt;
  171. &lt;li&gt;&lt;a href=&quot;/&quot;&gt;Accueil&lt;/a&gt;&lt;/li&gt;
  172. &lt;li&gt;&lt;a href=&quot;/blog/&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt;
  173. &lt;/ul&gt;
  174. &lt;/div&gt;
  175. &lt;div id=&quot;content&quot;&gt;
  176. &lt;h2&gt;Billet un&lt;/h2&gt;
  177. &lt;p&gt;C'est mon premier billet.&lt;/p&gt;
  178. &lt;h2&gt;Billet deux&lt;/h2&gt;
  179. &lt;p&gt;C'est mon second billet.&lt;/p&gt;
  180. &lt;/div&gt;
  181. &lt;/body&gt;
  182. </pre>
  183. <p>Notez que tant que le template enfant ne redéfinit pas le bloc <tt class="docutils literal"><span class="pre">sidebar</span></tt>, la
  184. valeur du template parent est utilisée à la place. Le contenu au sein d'un tag
  185. <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">block</span> <span class="pre">%}</span></tt> dans un template parent est toujours utilisé en dernier lieu.</p>
  186. <p>Vous pouvez utiliser autant de niveaux d'héritage que désiré. L'une des manières
  187. habituelle d'utiliser l'héritage est l'approche à trois niveaux suivante :</p>
  188. <blockquote>
  189. <ul class="simple">
  190. <li>Créez un template <tt class="docutils literal"><span class="pre">base.html</span></tt> qui définit l'apparence globale de votre
  191. site.</li>
  192. <li>Créez un template <tt class="docutils literal"><span class="pre">base_NOMDESECTION.html</span></tt> pour chaque section de votre
  193. site. Par exemple, <tt class="docutils literal"><span class="pre">base_news.html</span></tt>, <tt class="docutils literal"><span class="pre">base_sports.html</span></tt>. Ces templates
  194. étendent tous <tt class="docutils literal"><span class="pre">base.html</span></tt> et incluent le style/design spécifique à la
  195. section.</li>
  196. <li>Créez un template individuel pour chaque type de page, comme les articles
  197. de nouveautés ou les billets d'un blog. Ces templates étendent le template
  198. de la section appropriée.</li>
  199. </ul>
  200. </blockquote>
  201. <p>Cette approche maximise la réutilisation du code et rend facile l'ajout de blocs
  202. partagés entre plusieurs parties du site comme la navigation.</p>
  203. <p>Voici quelques astuces pour utiliser l'héritage :</p>
  204. <blockquote>
  205. <ul class="simple">
  206. <li>Si vous utilisez <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">extends</span> <span class="pre">%}</span></tt> dans un template, ça doit être le
  207. premier tag du template. Dans le cas contraire l'héritage ne fonctionnera
  208. pas.</li>
  209. <li>Il vaut mieux avoir de nombreux tags <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">block</span> <span class="pre">%}</span></tt> dans vos templates de
  210. base. Rappelez-vous, les templates enfants n'ont pas à redéfinir la
  211. totalité des blocs, vous pouvez donc remplir les blocs avec un contenu
  212. intéressant par défaut. Ne redéfinissez ensuite que ceux dont vous avez
  213. besoin. Il vaut mieux en avoir plus que pas assez.</li>
  214. <li>Si vous vous apercevez d'une duplication du contenu dans de nombreux
  215. templates, cela signifie probablement que vous devriez déplacer ce contenu
  216. dans un <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">block</span> <span class="pre">%}</span></tt> au sein d'un template parent.</li>
  217. <li>Si vous avez besoin du contenu issu du template parent, la variable
  218. <tt class="docutils literal"><span class="pre">{{</span> <span class="pre">block.super</span> <span class="pre">}}</span></tt> est là pour ça. C'est intéressant si vous souhaitez
  219. ajouter quelquechose au contenu parent existant au lieu de l'écraser.</li>
  220. </ul>
  221. </blockquote>
  222. <p>Pour finir, notez l'impossibilité de définir plusieurs tags <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">block</span> <span class="pre">%}</span></tt>
  223. ayant le même nom dans le même template. Cette limitation existe car un tag
  224. block fonctionne dans les deux directions. Cela signifie qu'un tag block ne
  225. procure pas seulement un espace à compléter -- il définit aussi au niveau enfant
  226. le contenu parent accessible dans cet espace (par <tt class="docutils literal"><span class="pre">block.super</span></tt>).</p>
  227. </div>
  228. <div class="section">
  229. <h1><a id="utiliser-les-r-f-rences-incluses" name="utiliser-les-r-f-rences-incluses">Utiliser les références incluses</a></h1>
  230. <p>L'interface d'administration de Django inclue une référence complète à
  231. l'ensemble des tags et filtres de template disponibles pour un site donné. Pour
  232. y accéder, rendez vous dans votre interface d'administration et cliquez sur le
  233. lien « Documentation » en haut à droite de la page.</p>
  234. <p>La référence est divisée en 4 sections : tags, filtres, modèles et vues.</p>
  235. <p>Les sections <strong>tags</strong> et <strong>filtres</strong> décrivent tous les tags de base (en fait,
  236. les références de tag et de filtre qui suivent proviennent directement de ces
  237. pages) ainsi que vos propres bibliothèques de tags et de filtres disponibles.</p>
  238. <p>La page des <strong>vues</strong> est la plus intéressante. Chaque URL de votre site a une
  239. entrée distincte ici, et cliquer sur cette URL vous donnera accès :</p>
  240. <blockquote>
  241. <ul class="simple">
  242. <li>Au nom de la fonction qui génère cette vue.</li>
  243. <li>À une description succinte de ce que fait la vue.</li>
  244. <li>Au <strong>contexte</strong>, ou une liste de variables accessibles dans le template de
  245. la vue.</li>
  246. <li>Au nom du ou des template(s) qui est(sont) utilisé(s) pour cette vue.</li>
  247. </ul>
  248. </blockquote>
  249. <p>Chaque page de documentation d'une vue dispose aussi d'un bookmarklet que vous
  250. pouvez utiliser pour aller directement de n'importe quelle page à la page de
  251. documentation de cette vue.</p>
  252. <p>Les sites propulsés par Django utilisant généralement des objets de base de
  253. données, la section <strong>modèles</strong> de la page de documentation décrit chaque type
  254. d'objet dans le système courant avec l'ensemble des champs disponibles dans cet
  255. objet.</p>
  256. <p>L'ensemble des pages de documentation vous renseigne sur chaque tag, filtre,
  257. variable et objet disponible pour un template donné.</p>
  258. </div>
  259. <div class="section">
  260. <h1><a id="tags-personnalis-s-et-bilbioth-ques-de-filtres" name="tags-personnalis-s-et-bilbioth-ques-de-filtres">Tags personnalisés et bilbiothèques de filtres</a></h1>
  261. <p>Certaines applications procurent des tags personnalisés et des bilbiothèques de
  262. filtres. Pour y accéder dans un template, utilisez le tag <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">load</span> <span class="pre">%}</span></tt>:</p>
  263. <pre class="literal-block">
  264. {% load comments %}
  265. {% comment_form for blogs.entries entry.id with is_public yes %}
  266. </pre>
  267. <p>Ci-dessus, le tag <tt class="docutils literal"><span class="pre">load</span></tt> charge la bibliothèque de tags <tt class="docutils literal"><span class="pre">comments</span></tt>, ce qui
  268. rend ensuite le tag <tt class="docutils literal"><span class="pre">comment_form</span></tt> utilisable. Consultez la rubrique
  269. documentation de votre interface d'administration pour trouver la liste des
  270. bibliothèques personnalisées de votre installation.</p>
  271. <p>Le tag <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">load</span> <span class="pre">%}</span></tt> peut prendre plusieurs noms de bibliothèques à la fois,
  272. séparés par des espaces. Exemple:</p>
  273. <pre class="literal-block">
  274. {% load comments i18n %}
  275. </pre>
  276. <div class="section">
  277. <h2><a id="biblioth-ques-personnalis-es-et-h-ritage-des-templates" name="biblioth-ques-personnalis-es-et-h-ritage-des-templates">Bibliothèques personnalisées et héritage des templates</a></h2>
  278. <p>Lorsque vous chargez un tag personnalisé ou une bibliothèque de filtres, les
  279. tags/filtres ne sont accessibles qu'au sein du template courant -- et aucun des
  280. templates parents ou enfants issus de l'héritage des templates n'y a accès.</p>
  281. <p>Par exemple, si un template <tt class="docutils literal"><span class="pre">foo.html</span></tt> a <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">load</span> <span class="pre">comments</span> <span class="pre">%}</span></tt>, un template
  282. enfant (par exemple, un qui a <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">extends</span> <span class="pre">&quot;foo.html&quot;</span> <span class="pre">%}</span></tt>) n'aura <em>pas</em> accès
  283. aux filtres et tags du template comments. Le template enfant doit avoir son
  284. propre <tt class="docutils literal"><span class="pre">{%</span> <span class="pre">load</span> <span class="pre">comments</span> <span class="pre">%}</span></tt>.</p>
  285. <p>C'est une fonctionnalité pour la maintenabilité et l'intégrité des templates.</p>
  286. </div>
  287. </div>
  288. <div class="section">
  289. <h1><a id="r-f-rence-des-tags-et-filtres-inclus" name="r-f-rence-des-tags-et-filtres-inclus">Référence des tags et filtres inclus</a></h1>
  290. <p>Pour ceux ne disposant pas d'une interface d'administration, la référence des
  291. tags et filtres suit. En raison de la personnalisation possible de Django, la
  292. référence dans votre administration prévaut sur celle-ci concernant
  293. l'accessibilité et la fonction des tags et filtres.</p>
  294. <div class="section">
  295. <h2><a id="r-f-rence-des-tags-inclus" name="r-f-rence-des-tags-inclus">Référence des tags inclus</a></h2>
  296. </div>
  297. <div class="section">
  298. <h2><a id="r-f-rence-des-filtres-inclus" name="r-f-rence-des-filtres-inclus">Référence des filtres inclus</a></h2>
  299. <p><strong>La suite de la traduction est en cours</strong>, j'ai jugé qu'il était plus important
  300. de publier cette première partie qui pose les bases en attendant. Il faut avouer
  301. que <a class="reference" href="http://www.djangoproject.com/documentation/templates/#built-in-tag-and-filter-reference">la suite (en)</a> est moins passionnante...</p>
  302. <p>Vous pouvez maintenant retourner à la <a class="reference" href="https://larlet.fr/david/biologeek/archives/20060617-traduction-francaise-de-la-documentation-de-django-le-framework-web-python/">page d'accueil des traductions de la
  303. documentation de Django</a>.</p>
  304. <p>Cette traduction correspond à la révision 3589 (post 0.95).</p>
  305. </div>
  306. </div>