TemplateDoesNotExist - Django Error

I'm using Django Rest Framework. and I keep getting an error

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

I dont know how I'm going wrong. This is the first time I'm trying out hands on REST Framework. This is code.

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 import widgets from rest_framework import serializers from modules.data.models import *

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'),
)
36185 次浏览

确保你的 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

不是你的情况,也可能是原因是定制 loadersDjango。例如,如果在设置中(从 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中。

I ran into the same error message. In my case, it was due to setting the backend to Jinja2. In my settings file:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
...

将其修改为默认值就解决了这个问题:

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
...

仍然不确定是否有一种方法可以将 Jinja2后端用于 rest _ Framework。

即使我们没有在已安装的应用程序中添加“ rest _ Framework”,我们也可以得到这个错误。 So please check that too if you are facing the error.