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
。