URL-адреса, представления и шаблоны новичка Django - как может провалиться этот невероятно простой проект Django? - PullRequest
0 голосов
/ 16 января 2012

Когда пользователь попадает на http://127.0.0.1:8000/, я хотел бы отобразить html-страницу с надписью "welcome". Когда пользователь идет http://127.0.0.1:8000/time/ Я хотел бы отобразить текущее время. Я следовал инструкциям к т и пунктир каждый я. Мои настройки ниже. Почему я продолжаю получать ошибку TemplateDoesNotExist?

views.py

from django.template.loader import get_template
from django.shortcuts import render
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    current_datetime_template = get_template('current_datetime.html')
    context_dict = {'current_date': now}
    return render(request, current_datetime_template, context_dict)

def welcome(request):
    welcome_template = get_template('welcome.html')
    context_dict = {'username' : 'Sally Jenkins'}
    return render(request, welcome_template, context_dict)

urls.py

from django.conf.urls.defaults import patterns, include, url
from simpletest.views import welcome, current_datetime

urlpatterns = patterns('',
    url(r'^time/$', current_datetime),
    url(r'^$', welcome),
)

settings.py

... # all defaults ommitted here - I changed nothing.
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)

В моем каталоге проекта django у меня есть каталог с именем templates, который содержит base.html, current_datetime.html и welcome.html, как и ожидалось.

Пожалуйста, скажите мне, что я упустил.

Спасибо.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Я использую virtualenv. Имеет ли значение тот факт, что у меня есть два проекта django в /Users/quanda/dev/django-projects/? Я не могу себе этого представить. Один называется "расцвет" и является основным проектом, над которым я работаю. Другой называется «самый простой», и я сделал его чрезвычайно простым, чтобы я мог изолировать проблему, с которой столкнулся в своем проекте. Я использую одну и ту же виртуальную среду для обоих проектов. Запуск tree -L 2 из django-проектов / дает следующую структуру:

.
├── Procfile
├── blossom
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── fixtures
│   ├── manage.py
│   ├── onora
│   ├── settings.py
│   ├── settings.pyc
│   ├── sqlite3-database
│   ├── templates
│   ├── test_stuff.py
│   ├── urls.py
│   ├── urls.pyc
│   ├── views.py
│   └── views.pyc
├── requirements.txt
├── simpletest
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── manage.py
│   ├── settings.py
│   ├── settings.pyc
│   ├── templates
│   ├── urls.py
│   ├── urls.pyc
│   ├── views.py
│   └── views.pyc
└── virtual_environment
    ├── bin
    ├── django-registration-0.8-alpha-1.tar
    ├── include
    └── lib

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Вы передаете объект шаблона вместо имени шаблона, как показано здесь в трассировке:

/Users/quanda/dev/django-projects/simpletest/templates/<django.template.base.Template object at 0x102963910> (File does not exist)
...
File "/Users/quanda/dev/django-projects/simpletest/../simpletest/views.py" in current_datetime
  9.     return render(request, current_datetime_template, context_dict)

Не передавайте переменную current_datetime_template - просто передайте 'current_datetime.html' как строкувот так:

def current_datetime(request):
    now = datetime.datetime.now()
    context_dict = {'current_date': now}
    return render(request, 'current_datetime.html', context_dict)
0 голосов
/ 16 января 2012

Предположим, foobar - ваш проект в Django.Тогда welcome.html должен находиться в /foobar/templates/welcome.html и в настройках:

TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__),"templates"), 
)  #for linux and windows
0 голосов
/ 16 января 2012

Попробуйте что-то подобное в settings.py:

CURRENT_PATH = os.path.abspath(os.path.dirname(__file__) # for linux
# or
CURRENT_PATH = os.path.abspath(os.path.dirname(__file__).replace('\\', '/') # for windows

TEMPLATE_DIRS = (os.path.join(CURRENT_PATH, 'templates'),) # for template dirs
...