新手Django网址,视图和模板 - 这个令人难以置信的简单django项目怎么可能失败?

时间:2012-01-16 19:16:17

标签: django django-templates django-views django-urls

当用户登陆http://127.0.0.1:8000/时,我想显示一个“欢迎”的html页面。当用户转到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.htmlcurrent_datetime.htmlwelcome.html,与预期一样。

请告诉我我忽略了什么。

感谢。

更多信息:

我正在使用virtualenv。我在/Users/quanda/dev/django-projects/中有两个django项目的事实是否有所不同?我无法想象它会。一个被称为“开花”,是我正在研究的主要项目。另一个被称为“最简单”,我把它变得非常简单,以便我可以隔离我在开花项目中遇到的问题。我为两个项目使用相同的虚拟环境。从django-projects /运行tree -L 2给出以下结构:

.
├── 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 个答案:

答案 0 :(得分:3)

您正在传递模板对象而不是模板名称,如traceback中所示:

/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)

答案 1 :(得分:0)

在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

答案 2 :(得分:0)

假设foobar是你的django项目。然后welcome.html应该位于/foobar/templates/welcome.html 和设置:

TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__),"templates"), 
)  #for linux and windows