我试过这几种方法没有运气。如果我尝试渲染我的观点:
from django.shortcuts import render
from django.template import loader
def index(request):
render(request, loader.get_template('index.html'))
我收到此错误:
TemplateDoesNotExist at /
如果我将代码更改为:
from django.http import HttpResponse
from django.template.loader import render_to_string
def index(request):
content = render_to_string('index.html')
HttpResponse(content)
它实际上找到了模板并呈现它(content
被设置为渲染的html)但我现在收到此错误:
ValueError at /
The view home.controller.index didn't return an HttpResponse object.
这是我的文件夹结构和我的设置:
myProject/
settings.py
home/
controller.py
urls.py
models.py
templates/
home/
index.html
在我的setting.py文件中,我有:
SITE_ROOT = os.path.dirname(os.path.realpath(__name__))
TEMPLATE_DIRS = ( os.path.join(SITE_ROOT, 'home/templates/home'), )
INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.staticfiles',
'gunicorn',
'home'
)
我已经为TEMPLATE_DIRS
尝试了多种变体,但我想假设我已经添加了home
作为我认为的应用程序。有人知道这里发生了什么吗?
更新
解决这个问题的组合。首先需要return
语句( doh ),我想我正在混合如何呈现模板的示例。无需导入加载程序或手动渲染它。这就是我实际工作的结果:
from django.shortcuts import render
def index(request):
return render(request, 'home/index.html')
感谢@lalo和@Rao指出我正确的方向。
答案 0 :(得分:2)
你没有从你的观点返回任何东西。
return HttpResponse(blah)
答案 1 :(得分:2)
我会尝试:
from django.shortcuts import render
def index(request):
render(request, 'home/index.html')