2016-09-11 20 views
4

ich die Vorlage base.html Vorlage nicht erweitern kann header.htmlIch kann die Vorlage django nicht erweitern

Inhalt base.html

<div id="main-container"> 
    <!-- HEADER --> 
    {% block header %}{% endblock %} 
    <!-- END HEADER --> 
</div> 

Inhalt header.html

{% extends "blog/base.html" %} 
{% block header %} 
<header id="header"> 
*** 
</header> 
{% endblock %} 

Die Ausgabe im Browser erhalten die Code:

<div id="main-container"> 
    <!-- HEADER --> 

    <!-- END HEADER --> 

Warum nicht in der Lage, die Vorlage zu erweitern? Verwendung von {% include "blog/header.html"%} Code eingefügt. mit extends nicht. Verwenden Django 1.10.1

views.py

from django.shortcuts import render 
from django.utils import timezone 
from .models import Post 
from django.shortcuts import render, get_object_or_404 

def post_list(request): 
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 
    return render(request, 'blog/index.html', {'posts': posts}) 

def post_detail(request, pk): 
     post = get_object_or_404 (Post, pk=pk) 
     return render(request, 'blog/base.html', {'post': post}) 

def header(request): 
    return render(request, 'blog/header.html') 

Durch {% include "blog/header.html" %} funktioniert. So ist der Weg richtig ausgeschrieben.

Dachte den Fehler hier:

def header(request): return(request, 'blog/header.html')

def header(request): render(request, 'blog/header.html')

def header(request): return render_to_response (request, 'blog/header.html')

Problem (((

+0

Was ist die URL, die Sie treffen? – arcegk

+0

Der obige Code wird sicherlich funktionieren ... –

+0

Auf welche dieser Aufrufe zeigt Ihre URL eigentlich? –

Antwort

0

ich glaube, Sie zwischen den verwirrt haben würde und sich in django Vorlagen

Basierend auf Ihren Dateinamen gehe ich davon aus, dass header.html der Teil ist, der in die base.html aufgenommen werden soll und Sie base.html rendern.

Django Templating-Engine funktioniert nicht auf diese Weise.

Verwenden Sie include{% include "path/to/header.html" %} in base.html und Juse haben den Header html in header.html.

+0

Ich habe eine Überschrift auf allen Seiten gleich. Also ich tue keine geeignete Verbindungsmethode via include. Include - ich werde es verwenden, um einzigartige Blöcke zu verbinden (selten auf der Website) Weniger Last. –

0

Wenn Sie eine Vorlage erweitern möchten, sollten Sie Vorlage mit {% extends ...%} -Tag (in Ihrem Fall header.html) rendern, wenn Sie etwas in die neu geteilte Vorlage einfügen möchten, sollten Sie {% include ...%} -Tag. Sie können neue Vorlage für bestimmte Seite und ovreload {% block Kopf%}, zum Beispiel machen:

base.html:

{% block header %} 
{% include 'std_header.html' %} 
{% endblock %} 

{% block content %} 
{% endblock %} 

{% block footer%} 
{% endblock %} 

Und bestimmte Seite, zum Beispiel Zielseite Standard-Header überlastet:

zielseite.html:

{% extends 'base.html' %} 

{% block header %} 
{% include 'landing_header.html' %} 
{% endblock %} 

{% block content %} 
<!-- landing page content --> 
{% endblock %} 

Also für genannte Ansicht landing_page Sie zielseite.html Vorlage zu machen haben.

Verwandte Themen