TemplateDoesNotExist - Django 错误
Posted
技术标签:
【中文标题】TemplateDoesNotExist - Django 错误【英文标题】:TemplateDoesNotExist - Django Error 【发布时间】:2014-02-19 21:56:02 【问题描述】:我正在使用 Django Rest 框架。我不断收到错误
Exception Type: TemplateDoesNotExist
Exception Value: rest_framework/api.html
我不知道我怎么会出错。这是我第一次尝试 REST Framework。 这是代码。
views.py
import socket, json
from modules.data.models import *
from modules.utils import *
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from modules.actions.serializers import ActionSerializer
@api_view(['POST'])
@check_field_exists_wrapper("installation")
def api_actions(request, format = None):
action_type = request.POST['action_type']
if action_type == "Shutdown" :
send_message = '1'
print "Shutting Down the system..."
elif action_type == "Enable" :
send_message = '1'
print "Enabling the system..."
elif action_type == "Disable" :
send_message = '1'
print "Disabling the system..."
elif action_type == "Restart" :
send_message = '1'
print "Restarting the system..."
if action_type in ["Shutdown", "Enable", "Disable"] : PORT = 6000
else : PORT = 6100
controllers_list = Controller.objects.filter(installation_id = kwargs['installation_id'])
for controller_obj in controllers_list:
ip = controller_obj.ip
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, PORT))
s.send(send_message)
s.close()
except Exception as e:
print("Exception when sending " + action_type +" command: "+str(e))
return Response(status = status.HTTP_200_OK)
models.py
class Controller(models.Model):
id = models.IntegerField(primary_key = True)
name = models.CharField(max_length = 255, unique = True)
ip = models.CharField(max_length = 255, unique = True)
installation_id = models.ForeignKey('Installation')
serializers.py
从 django.forms 导入小部件 从 rest_framework 导入序列化程序 从 modules.data.models 导入 *
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Controller
fields = ('id', 'name', 'ip', 'installation_id')
urls.py
from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = patterns('modules.actions.views',
url(r'^$','api_actions',name='api_actions'),
)
【问题讨论】:
您的 settings.py INSTALLED_APPS 中是否列出了“rest_framework”? Noobest 错误。谢谢你。 我还有一个疑问。我如何获得一个表格,以便我在表格中发布一些数据,用这些值访问数据库并获得结果?How do I get the form?
@ScottWoodall 请发布答案,并获得一些积分!
【参考方案1】:
确保您的settings.py
INSTALLED_APPS
中列出了rest_framework
。
【讨论】:
也可能是因为没有注册 DRF 的依赖。就我而言,我必须将'django_hstore',
添加到INSTALLED_APPS
。【参考方案2】:
对我来说,rest_framework/api.html
实际上由于安装损坏或其他未知原因而在文件系统上丢失。重新安装djangorestframework
解决了这个问题:
$ pip install --upgrade djangorestframework
【讨论】:
同样的事情发生在我身上。请注意,该命令将升级到可能不兼容的版本(即使您的 setup.py 和/或 requirements.txt 另有说明)。您可以尝试 pip 卸载/安装或指定确切的版本。【参考方案3】:请注意,DRF 会尝试以请求的相同格式返回数据。在您的浏览器中,这很可能是 HTML。要指定替代响应,请使用?format=
参数。例如:?format=json
。
TemplateDoesNotExist
错误最常发生在您在浏览器中访问 API 端点并且您确实没有将rest_framework
包含在您的已安装应用程序列表中,正如其他受访者所述.
如果您的应用列表中没有包含 DRF,但又不想使用 HTML Admin DRF 页面,请尝试使用其他格式来“避开”此错误消息。
更多来自文档的信息:http://www.django-rest-framework.org/topics/browsable-api/#formats
【讨论】:
【参考方案4】:不是你的情况,但也可能的原因是为Django
定制loaders
。例如,如果您在设置中有(自Django 1.8
):
TEMPLATES = [
...
'OPTIONS':
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages'
],
'loaders': [
'django.template.loaders.filesystem.Loader',
],
...
]
Django 不会尝试使用模板查看应用程序文件夹,因为您应该为此明确地将 django.template.loaders.app_directories.Loader
添加到 loaders
中。
注意,默认情况下django.template.loaders.app_directories.Loader
包含在loaders
中。
【讨论】:
WARNINGS: ?: (1_8.W001) 独立的 TEMPLATE_* 设置在 Django 1.8 中已弃用,并且 TEMPLATES 字典优先。您必须将以下设置的值放入默认的 TEMPLATES 字典中:TEMPLATE_DEBUG。【参考方案5】:我遇到了同样的错误信息。就我而言,这是由于将后端设置为 Jinja2。在我的设置文件中:
TEMPLATES = [
'BACKEND': 'django.template.backends.jinja2.Jinja2',
...
改回默认值解决了这个问题:
TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
...
仍然不确定是否有办法将 Jinja2 后端与 rest_framework 一起使用。
【讨论】:
【参考方案6】:即使我们没有在已安装的应用程序中添加“rest_framework”,我们也会收到错误消息。 因此,如果您遇到错误,请也检查一下。
【讨论】:
欢迎来到***。这个问题大约有 8 年的历史,并且已经有一个公认的答案。以上是关于TemplateDoesNotExist - Django 错误的主要内容,如果未能解决你的问题,请参考以下文章
Django 管理站点:TemplateDoesNotExist?