Django模板的简单继承问题

时间:2016-02-01 18:01:55

标签: python django for-loop inheritance

刚刚开始使用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)必须位于Templates目录中(不在模板内的app目录内)吗?我尝试了它并且仍然发生相同(输出空白页),如果在尝试组合文件位置时没有错误(在这两个文件夹之间)。

1 个答案:

答案 0 :(得分:-1)

在您的应用中,模板文件夹结构必须类似于:

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

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

修改

如果您的模板位于应用模板文件夹中,则应将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',
            ],
        },
    },
]