Django模板的简单继承问题

刚刚在Django开始,并且我有一些继承问题。 看起来循环for继承其他模板时不起作用。 这是我在base.html中的代码:

<!DOCTYPE html>
<html lang="es">
<head>
    <title>{% block title %}Titulo del proyecto web{% endblock %}</title>
</head>
<body>
    <div id="header">
        <h1>Título del proyecto web</h1>
    </div>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

因此,在index.html中,目标是显示for循环以及base的'header'div。 Index.html是这样的:

{% extends "base.html" %}

{% block title %}Questions{% endblock %}

{% block content %}
{% for pregunta in preguntas %}
    <h3>{{ pregunta }} ?</h3><br/>
{% endfor %}
{% endblock %}

我已经检查了几次代码。 如果我退出继承循环工作正常,但我不知道为什么扩展到base.html时不起作用。

当我运行服务器页面时,它只是出现一个空白页面。 帮助将不胜感激。 非常感谢你。

编辑:这里是我的模板目录结构:

主项目/模板/和内部模板文件夹中有base.html和一个'preguntasyrespuestas'文​​件夹,它是应用程序名称。

在'preguntasyrespuestas'文​​件夹里面有index.html模板。 但它自动创建一个'base.html'也在这个文件夹(?)我只是删除它。

而views.py代码如下所示:

from django.http import HttpResponse,Http404
from preguntasyrespuestas.models import Pregunta
from django.shortcuts import get_object_or_404, render_to_response

def index(request):
    preguntas = Pregunta.objects.all()
    return render_to_response('preguntasyrespuestas/index.html',
                                        {'preguntas': preguntas})

def pregunta_detalle(request, pregunta_id):
    pregunta = get_object_or_404(Pregunta, pk=pregunta_id)
    return render_to_response('preguntasyrespuestas/pregunta_detalle.html',
                                        {'pregunta': pregunta})

这里是settings.py模板var:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ["C:/Projects/primerproyecto/Templates"],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

因此,这两个文件(base.html和index.html)都必须位于模板目录中(不在模板内的应用程序目录中)? 我已经尝试过,并且仍然发生相同的情况(输出一个空白页面),如果尝试合并文件位置时(在这两个文件夹之间),如果不是错误的话。


在您的应用程序中,模板文件夹结构必须如下所示:

|- preguntasyrespuestas # your app folder
    |- templates
       -base.html
       |- preguntasyrespuestas
          -index.html
          -pregunta_detalle.html
          ....

模板目录必须位于您的应用程序文件夹中,并且其内部必须是具有应用程序名称的另一个文件夹,并且其内部必须是模板文件。

编辑

如果您的模板位于应用程序模板文件夹中,则应将DIRS更改为空列表: DIRS:[]

 TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [], # change here: put an empty list
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
] 
链接地址: http://www.djcxy.com/p/90135.html

上一篇: Simple inheritance issue with Django templates

下一篇: django template inheritance: how to NOT display block from parent?