TemplateDoesNotExist - Django错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TemplateDoesNotExist - Django错误相关的知识,希望对你有一定的参考价值。
我正在使用Django Rest Framework。而且我一直收到错误
Exception Type: TemplateDoesNotExist
Exception Value: rest_framework/api.html
我不知道我怎么会出错。这是我第一次尝试使用REST Framework。这是代码。
views.朋友
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.朋友
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')
serialize认识.朋友
来自于rest_framework的django.forms导入小部件从modules.data.models导入导入序列化*
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Controller
fields = ('id', 'name', 'ip', 'installation_id')
URLs.朋友
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'),
)
确保你的rest_framework
settings.py
中列出了INSTALLED_APPS
。
对我来说,由于安装损坏或其他一些未知原因,rest_framework/api.html
实际上在文件系统中丢失了。重新安装djangorestframework
修复了问题:
$ pip install --upgrade djangorestframework
请注意,DRF尝试以请求的格式返回数据。在您的浏览器中,这很可能是HTML。要指定备用响应,请使用?format=
参数。例如:?format=json
。
当您访问浏览器中的API端点并且您没有将TemplateDoesNotExist
包含在已安装的应用程序列表中时,rest_framework
错误最常出现,如其他受访者所述。
如果您的应用程序列表中没有包含DRF,但又不想使用HTML Admin DRF页面,请尝试使用其他格式“左右”显示此错误消息。
来自这里的文档的更多信息:http://www.django-rest-framework.org/topics/browsable-api/#formats
不是你的情况,但也可能的原因是为loaders
定制Django
。例如,如果你有设置(从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
中。
我遇到了同样的错误消息。就我而言,这是由于将后端设置为Jinja2。在我的设置文件中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
...
将此更改回默认值可修复问题:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
...
仍然不确定是否有办法在rest_framework中使用Jinja2后端。
以上是关于TemplateDoesNotExist - Django错误的主要内容,如果未能解决你的问题,请参考以下文章
Django 管理站点:TemplateDoesNotExist?