136 votes

Comment revenir sur un « bloc » dans un modèle de django

Je veux utiliser le même {% block %} deux fois dans la même django template. Je veux que ce bloc à apparaître plus d'une fois dans mon template de base:

# base.html
<html>
    <head>
        <title>{% block title %}My Cool Website{% endblock %}</title>
    </head>
    <body>
        <h1>{% block title %}My Cool Website{% endblock %}</h1>
    </body>
</html>

Et puis l'étendre:

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

# pictures.html
{% extends 'base.html' %}
{% block title %}My Pictures{% endblock %}

# cats.html
{% extends 'base.html' %}
{% block title %}My Cats{% endblock %}

Je vais avoir une exception, comme Django veut le bloc à apparaître qu'une seule fois:

TemplateSyntaxError /

"en bloc" de la balise avec le nom "title" s'affiche plus d'une fois

Un moyen rapide et sale solution serait de dupliquer le bloc de titre en title1 et titre2:

# blog.html
{% extends 'base.html' %}
{% block title1 %}My Blog{% endblock %}
{% block title2 %}My Blog{% endblock %}

Mais c'est une violation de la SEC principe. Il serait très difficile, car j'ai beaucoup d'hériter de modèles, et aussi parce que je ne veux pas aller en enfer ;-)

Est-il une astuce ou de contourner ce problème? Comment puis-je répéter le même bloc dans mon template, sans recopier tout le code?

73voto

dqd Points 563

Je pense que le processeur de contexte sert dans ce cas une overdose. Vous pouvez le faire facilement :

Et puis :

et ainsi de suite... Ressemble à sec compatible.

18voto

Aaron Maenpaa Points 39173

Vous ne voulez probablement en fait d’utiliser un bloc, mais plutôt d’utiliser seulement une variable :

Vous définissez ensuite le titre à travers le cadre.

14voto

romkyns Points 17295

Voici un moyen que j’ai découvert en essayant de faire la même chose moi-même :

Nécessite un fichier supplémentaire malheureusement, mais ne nécessite pas de passer le titre de la vue.

12voto

Javier Points 33134

vous pouvez utiliser `` plus d’une fois. Il n’est pas la même sous forme de blocs, mais le tour est joué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X