当用户登陆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.html
,current_datetime.html
和welcome.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
答案 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