2 votes

Django 1.9. héritage des modèles. Le bloc n'affiche pas

J'ai 2 pages html dans mes modèles Django. J'essaie d'insérer cats.html dans index.html comme un bloc, mais rien ne se passe. Aucune erreur, aucun affichage. J'ai déjà regardé dans la documentation de Django et sur Youtube. Je n'arrive pas à comprendre où est le problème.

index.html :

    {% load static %}

<!DOCTYPE doctype html>
        <html class="no-js" lang="en">
         <head>
          <meta charset="utf-8"/>
      <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
      <link rel="stylesheet" type="text/css" href="{% static 'items/index-style.css' %}" />

      <title>
       my site
      </title>

     </head>
     <body>
{% block cats %} 
{% endblock cats %}
 </body>
</html>

chats.html :

{% extends "index.html" %}

{% block cats %}

<div class="row column">
    <p class="lead">
     Категории товаров
    </p>
   </div>
   <div class="row small-up-1 medium-up-2 large-up-3">

        {% for category in categories %}

    <div class="column">
    <a href="stackoverflow.com/{{category.alias}}">

     <div class="callout">
      <p>
       {{category.name}}
      </p>
      <p>
       <img alt="image of a planet called Pegasi B" src="{{category.image}}"/>
      </p>
      <p class="lead">
      <!-- Цена: {{tovar.price}} -->
      </p>
      <p class="subheader">
       <!-- {{tovar.short_description}} -->
      </p>
     </div>
    </a>

    </div>

         {% endfor %}

   </div>

{% endblock cats %}

views.py :

from django.shortcuts import render
from django.http import HttpResponse, Http404
from django.template.loader import render_to_string

from items.models import *

# Create your views here.

def home(request):
    try:    
        categories = Category.objects.all()
    except: 
        raise Http404()
    context = {
        'categories':categories,
    }
    return render(request,"index.html",context)

1voto

Selcuk Points 15733

Vous confondez le nom du bloc avec le nom du modèle. Vous êtes pas en insérant cats.html en index.html comme vous l'attendez, mais vous étendez index.html dans votre cats.html . Vous devez utiliser votre modèle enfant ( cats.html ) dans votre vue, c'est-à-dire changer la dernière ligne en :

return render(request, 'cats.html', context)

-1voto

Abhishek Soni Points 16

En fait, le problème est que vous utilisez index.html comme modèle de base. et ensuite tu hérites de cats.html vous devez donc rendre cat.html pour obtenir le résultat souhaité. CECI EST UTILE POUR VOUS

return render(request, 'cats.html', context)

merci :)

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