需要Django教程的帮助

1 投票
3 回答
3380 浏览
提问于 2025-04-16 10:03

我正在这里做Django的教程:http://docs.djangoproject.com/en/1.2/intro/tutorial03/

我在settings.py文件中的TEMPLATE_DIRS看起来是这样的:

TEMPLATE_DIRS = (

    "/webapp2/templates/"
    "/webapp2/templates/polls"
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".

    # Always use forward slashes, even on Windows.

    # Don't forget to use absolute paths, not relative paths.

)

我的urls.py文件是这样的:

from django.conf.urls.defaults import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^polls/$', 'polls.views.index'),
    (r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'),
    (r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'),
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
    (r'^admin/', include(admin.site.urls)),
)

我的views.py文件是这样的:

from django.template import Context, loader
from polls.models import Poll
from django.http import HttpResponse

def index(request):
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5]
    t = loader.get_template('c:/webapp2/templates/polls/index.html')
    c = Context({
        'latest_poll_list': latest_poll_list,
    })
    return HttpResponse(t.render(c))

我觉得我可能把模板的路径写错了,因为当我把views.py的代码简化成这样的时候,就能正常加载页面了。

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the poll index.")

我的索引模板文件位于C:/webapp2/templates/polls/index.html。我到底哪里出错了呢?

This is the error I am getting:
Traceback (most recent call last):

  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
    self.result = application(self.environ, self.start_response)

  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 674, in __call__
    return self.application(environ, start_response)

  File "C:\Python27\lib\site-packages\django\core\handlers\wsgi.py", line 241, in __call__
    response = self.get_response(request)

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 141, in get_response
    return self.handle_uncaught_exception(request, resolver, sys.exc_info())

  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 180, in handle_uncaught_exception
    return callback(request, **param_dict)

  File "C:\Python27\lib\site-packages\django\utils\decorators.py", line 76, in _wrapped_view
    response = view_func(request, *args, **kwargs)

  File "C:\Python27\lib\site-packages\django\views\defaults.py", line 30, in server_error
    t = loader.get_template(template_name) # You need to create a 500.html template.

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 157, in get_template
    template, origin = find_template(template_name)

  File "C:\Python27\lib\site-packages\django\template\loader.py", line 138, in find_template
    raise TemplateDoesNotExist(name)

TemplateDoesNotExist: 500.html

3 个回答

0

你有没有试过在每个路径前面加上 C: 呢?

2

尝试从相对路径加载模板,而不是使用绝对路径。在你的情况下,可以试试这样:

 t = loader.get_template('index.html')
3
TEMPLATE_DIRS = (
    "/webapp2/templates/"
    "/webapp2/templates/polls"
)

在Python中,如果你在字符串之间不加逗号,它会在编译的时候把这些字符串连在一起。

还有一点:通常你不需要把模板文件夹的路径写死。下面的写法在大多数情况下就足够了:

def fromRelativePath(*relativeComponents):
    return os.path.join(os.path.dirname(__file__), *relativeComponents).replace("\\","/")

TEMPLATE_LOADERS = (
    "django.template.loaders.filesystem.Loader",
    "django.template.loaders.app_directories.Loader",
)

TEMPLATE_DIRS = (
    fromRelativePath("templates"),
)

这样Django会在“yoursite/templates”文件夹和每个已安装应用的“templates”文件夹中进行搜索。

撰写回答