Django Rest Frameworkを使用しています。エラーが発生し続けます
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からシリアライザーをインポートしますimport *
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Controller
fields = ('id', 'name', 'ip', 'installation_id')
rls.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'),
)
rest_framework
あなたのsettings.py
INSTALLED_APPS
。
私のために、 rest_framework/api.html
は、破損したインストールまたはその他の不明な理由により、実際にファイルシステム上にありませんでした。 djangorestframework
を再インストールすると問題が修正されました。
$ pip install --upgrade djangorestframework
DRFは、要求された同じ形式でデータを返そうとすることに注意してください。ブラウザからは、これはおそらくHTMLです。代替応答を指定するには、?format=
パラメーターを使用します。例:?format=json
。
TemplateDoesNotExist
エラーは、ブラウザでAPIエンドポイントにアクセスし、インストールされたリストにrest_framework
が含まれているnotを持っている場合に最もよく発生します他の回答者が説明したアプリ。
アプリのリストに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バックエンドを使用する方法があるかどうかはまだわかりません。