【问题标题】:Django: can't load template indexDjango:无法加载模板索引
【发布时间】:2025-11-28 15:45:01
【问题描述】:

我正在学习 Django 1.5 教程:编写你的第一个 Django 应用程序。在第 3 部分中,它讲授了如何加载名为 polls/index.html 的模板。它应该显示一个包含“What's up”的项目符号列表,当我指向“/polls/”的浏览器时,但是当我转到浏览器时

http://localhost:8000/polls/

,页面只是空白。

这是我的投票/urls.py

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
    )

这是我的投票/views.py

# Create your views here.

from django.http import HttpResponse
from django.template import RequestContext, loader

from polls.models import Poll

def index(request):
    latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = RequestContext(request, {
    'latest_poll_list': latest_poll_list,
    })
    return HttpResponse(template.render(context))

def detail(request, poll_id):
    return HttpResponse("You're looking at poll %s." % poll_id)

def results(request, poll_id):
    return HttpResponse("You're looking at the results of poll %s." % poll_id)

def vote(request, poll_id):
    return HttpResponse("You're voting on poll %s." % poll_id)

这是我的 index.html 的目录

mysite/polls/templates/polls/index.html

这是我的 index.html

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_pol_list %}
        <li><a href="/polls/{{poll.id}}">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

有人有同样的问题吗?

谢谢!!!

【问题讨论】:

  • 你设置TEMPLATE_DIRS了吗?
  • latest_poll_list 不是latest_pol_list
  • 谢谢大家!!!顺便说一句,任何 IDE 或某些方法都可以防止这种愚蠢的打字错误?
  • 在测试时,您可以将TEMPLATE_STRING_IF_INVALID 设置为某个值,这样您就会收到有关模板中变量名不正确的警告。 django debug toolbar 也可用于调试。

标签: django


【解决方案1】:

首先,基于函数的视图已被弃用。尝试基于类的视图,例如 django.views.generic.base.TemplateView
如果你想使用基于函数的视图django.shortcuts.render 很有用:

from django.shortcuts import render

def index(request):
    return render(request, 'templates/index.html', {'extra_context' : 'hello'}) 

get_template 返回一个 TemplateDoesNotExist 异常,因为您在 'poll' 中错过了一个 'l':

{% for poll in latest_pol_list %} 

我不会删除我的帖子的其余部分,因为这对你来说是一个很好的做法,希望你会发现它有用。

【讨论】:

  • -1:不推荐使用基于函数的视图。仅弃用了基于函数的通用视图。 OP正在遵循教程。在这个阶段用TemplateView 替换建议的视图可能会混淆问题,而不是帮助。