TemplateDoesNotExist – Django错误

我正在使用Django Rest框架。 我不断收到一个错误

Exception Type: TemplateDoesNotExist Exception Value: rest_framework/api.html 

我不知道我怎么会出错。 这是我第一次尝试使用REST框架。 这是代码。

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

from django.forms从rest_framework导入widgets从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

对我来说, 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

不是你的情况,而且可能的原因是为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