2008-11-21 11 views
1

Pour 2 fichiers modèles enfants héritant d'un bloc, le {{ block.super }} ne résout pasDans Django, Problème avec {{block.super}}, Comment éviter la duplication d'un `bloc` dans plusieurs fichiers modèles?

Python 2.5.2, Django 1.0, Windows XP SP3

code squelette Exemple pour les fichiers impliqués:

  1. base.html
  2. item_base.html
  3. show_info_for_all_items.html
  4. show_info_for_single_item.html

FICHIER: base.html

{% block content %} 
{% endblock %} 

FICHIER: item_base.html

{% extends "base.html" %} 
{% block item_info %} 
    Item : {{ item.name }}<br/> 
    Price : {{ item.price }}<br/> 
{% endblock %} 

FICHIER: show_info_for_all_items.html

{% extends "item_base.html" %} 
{% block content %} 
    <h1>info on all items</h1> 
    <hr/> 
    {% for item in items %} 
     {% block item_info %} 
      {{ block.super }} 
     {% endblock %} 
     <hr/> 
    {% endfor %} 
{% endblock %} 

FICHIER: show_info_for_single_item.html

{% extends "item_base.html" %} 
{% block content %} 
    <h1>info on single item</h1>  
    {% block item_info %} 
     {{ block.super }} 
    {% endblock %} 
{% endblock %} 

show_info_for_all_items.html montre une liste des articles ainsi que l'information de chaque article.

show_info_for_single_item.html montre un seul article avec l'information de l'article.

show_info_for_all_items.html et show_info_for_single_item.html parts même code pour montrer les informations de l'article, donc je l'ai déplacé à item_base.html dans block item_info

mais le {{ block.super }} dans show_info_for_all_items.html et show_info_for_single_item.html ne fonctionne pas. {{ block.super }} résout comme vide.

Si je déplace le code de retour de block item_info à item_base.html dans show_info_for_all_items.html et show_info_for_single_item.html cela fonctionne mais je dois dupliquer même code block item_info dans 2 fichiers.

Si le problème block.super ne peut pas être résolu, ne Django offre quelque chose comme INCLUDE =>{% INCLUDE "item_base.html" %} si les blocs d'un fichier modèle peuvent être inclus (au lieu de extends)

Comment puis-je éviter la duplication block item_info à la fois fichiers html?

+0

que vous aviez déjà googlé sur django + inclure vous auriez pu demander et répondu à cela dans une fraction du temps qu'il a fallu pour taper dans. –

+0

Embrasser les non-Googleurs: http://meta.stackexchange.com/questions/5280/embrace-the-non-googlers et Comment devrions-nous traiter les questions de Google? : http://meta.stackexchange.com/questions/8724/how-should-we-deal-with-google-questions – e70

+0

Non, je n'embrasserai pas les vampires, et je ne suis pas d'accord avec ceux qui les encouragent ici. SO ne peut pas et, IMNSHO, * ne devrait pas essayer * de remplacer les docs de haute qualité d'un projet comme Django. Penser que le SO peut et doit être l'arrogance, simple et clair. –

Répondre

4

Est-ce que Django offre quelque chose comme Include (...)

Oui !, il suffit de prendre un coup d'oeil à la documentation: include

Mettre le bloc de code commun dans foo.html, puis, dans chaque modèle:

{% include 'foo.html' %} 
2

En plus de l'étiquette include mentionné par DZPM, vous voudrez peut-être envisager d'écrire un custom inclusion tag.

L'avantage principal dans ce cas est que le modèle appelant n'a pas besoin d'utiliser les mêmes noms de variables que le modèle inclus. Vous pouvez afficher un élément qui est accessible depuis un endroit autre qu'une variable nommée « item »:

{% show_item user.favorite_item %} 
Questions connexes