2011-09-21 4 views
0

D'accord, celui-ci est complètement blowing mon esprit.Django Template Inheritance

J'ai un _base.html très simple, dont le code se lit comme suit:

<!DOCTYPE html /> 
<html xmlns='http://www.w3.org/1999/xhtml'> 
<head> 
    {% load static %} 

    <title>Welcome!</title> 

    <!-- Includes jQuery UI --> 
    <script type='application/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'></script> 
    <script type='application/javascript' src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js'></script> 
    <link rel='stylesheet' href='https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/cupertino/jquery-ui.css' type='text/css' media='screen' /> 

    <!-- Includes Columnal --> 
    <link rel='stylesheet' href='{% get_static_prefix %}Columnal/columnal.css' type='text/css' media='screen' /> 

    <!-- Custom CSS --> 
    <link rel='stylesheet' type='text/css' href='{% get_static_prefix %}Style.css' /> 

    {% block head %} 
    {% endblock %} 
</head> 

<body> 
    <header> 
     <table width='100%'> 
      <tr> 
       {% if user.is_authenticated %} 
        <td>Welcome, {{user.username}}!</td> 
        <td align='right'><a href='logout/'>Logout</a></td> 
       {% else %} 
        <td><a href='login/'>Login/Register</a></td> 
       {% endif %} 
      </tr> 
     </table> 
    </header> 

{% block content %} 
{% endblock %} 

</body> 
</html> 

Bien sûr, tout destiné à être étendu par un modèle d'enfant, cette page est logique par lui-même, et en effet, une fois rendu, je vois ce à quoi je m'attendrais et ce que j'avais prévu.

Cependant, quand j'ai essayé d'étendre ce fichier avec un modèle d'enfant, je recevais des résultats inattendus, donc j'essayé coupant au strict minimum absolu, à savoir:

{% extends '_base.html' %} 

une seule ligne de code. On pourrait penser que si j'affiche ce fichier, j'obtiens exactement le même résultat que si je viens d'afficher _base.html lui-même. Cependant, ce n'est pas le cas. Pour une raison quelconque, il y a une ligne blanche supplémentaire de néant au-dessus de l'en-tête lorsque j'utilise ce modèle enfant trivial. Ce qui est encore plus étrange, c'est que, si je sélectionne la source de vue pour les deux pages (c'est-à-dire, la page que je reçois directement de _base.html et celle que je reçois du template enfant), le code source est exactement le même. en utilisant Chrome). Comment se fait-il que deux fichiers, qui devraient afficher la même page, donnent le même code source exact (selon le navigateur), mais DISPLAY DIFFERENTLY. Cela a complètement soufflé mon esprit et je n'ai aucune idée de ce qui pourrait en être la cause. D'après ce que je comprends, Django fait les choses dans les coulisses et alimente le navigateur d'un fichier HTML brut, de sorte que le navigateur ne doit pas se préoccuper de la façon dont j'ai généré le HTML, tant que c'est pareil. Comment alors ces deux méthodes pourraient-elles produire des résultats différents? Toute aide serait très appréciée car j'ai été coincé dessus pendant les deux derniers jours.

P.S .: Je suis désolé que le code pour _base.html soit un peu long pour un message sur le forum. J'aurais probablement pu m'écorcher un peu, mais comme je n'ai aucune idée de ce qui se passe ici, je n'ai pas vraiment d'idée de ce qui compte et de ce qui ne l'est pas, alors je ne voulais pas prendre le risque.

EDIT: Comme je l'ai déjà mentionné, (dans Chrome) si je clique avec le bouton droit de la souris et sélectionne «Afficher la source de la page» pour les deux pages, j'obtiens exactement le même code source. Cependant, si à la place je sélectionne 'Inspecter l'élément', le code source n'est pas le même. Pour une raison quelconque, lors de l'affichage du code source via 'Inspecter l'élément' en utilisant la version du modèle enfant, je trouve tout le contenu de la balise <head> de _base.html dans la balise <body> du code source que je vois. Une idée de pourquoi cela arriverait?

+1

Désolé de dire que je ne peux pas reproduire ce problème en utilisant le code que vous avez fourni; il semble que quelque chose d'autre se prépare. –

+0

@Zach Snow: Par hasard, quel système d'exploitation utilisez-vous? Je suis sur Windows. . . cela pourrait-il faire une différence? –

+0

Je ne sais pas si cela ferait une différence; Je suis moi-même sur OS X. Malheureusement, il y a un certain nombre de choses qui pourraient faire la différence (middleware différent, peut-être même des chargeurs de gabarits différents, etc.). –

Répondre

0

Avez-vous spécifié le bon chemin du répertoire de modèles dans TEMPLATE_DIRS de settings.py. ?

Avez-vous également essayé d'afficher la page effaçant toutes les données de navigation (cookies, cache, etc ...)?

peut être le navigateur met en cache les données dans les coulisses ..

+0

Oui, le paramètre TEMPLATE_DIRS était correct. Cependant, je n'ai jamais pensé à effacer les données du navigateur, alors je vais essayer. . . –