2011-01-16 2 views
1

я делаю учебник Django здесь: http://docs.djangoproject.com/en/1.2/intro/tutorial03/Нужна помощь с Джанго учебник

Мои TEMPLATE_DIRS в settings.py выглядит следующим образом:

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
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"), 
) 

Это позволит сделать поиск Джанго в «YourSite/шаблонах» и в «шаблоны» каталога каждого intalled приложения.

+0

Я попытался добавить эту функцию и сменить TEMPLATE_DIRS, но она все еще не работает. Итак, мне нужно поставить запятую между ''/webapp2/templates/"' и '"/webapp2/templates/polls "'. В комментариях сказано оставить его как строку. В любом случае, я пробовал с запятыми, и это все еще не сработало. – super9

+0

@Nai: Конечно, вам нужны запятые. И поскольку вы находитесь в Windows, путь должен начинаться с «C: /» (хотя это не имеет значения для Python). Теперь, когда вы отредактировали свой вопрос, очевидно, что вам не хватает шаблона «500.html».Вы можете использовать 'DEBUG = True' (который использует шаблон трассировки по умолчанию при возникновении ошибки) или создать такой файл в каталоге шаблонов. Я предполагаю, что реальная проблема - это нечто иное - используйте сервер разработки и 'DEBUG = True', чтобы найти ошибку. – AndiDog

+0

Хорошо, это была опечатка, но включение DEBUG помогло мне исправить ошибки. Благодаря! – super9

0

Вы пытались добавить C: перед каждой траектории в TEMPLATE_DIRS?

+0

Да, я уже пробовал, что уже – super9

+0

get_template обычно используется только с именем файла шаблона или относительным путем, но я вижу, что вы используете полный путь. Как насчет того, чтобы изменить это? –

+0

Я пробовал все перестановки, но он все еще не работает – super9

2

Попробуйте загрузить шаблоны из связанного с ними пути, а не из абсолютного. В вашем случае попробуйте следующее:

t = loader.get_template('index.html') 
+0

К сожалению, это не сработало – super9

+1

Какая ошибка возникает при попытке загрузить страницу? – ikostia

+0

Только что обновил мой вопрос с ошибкой – super9

Смежные вопросы