TemplateDoesNotExist-Django 오류


117

Django Rest Framework를 사용하고 있습니다. 그리고 계속 오류가 발생합니다

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

django.forms에서 rest_framework에서 위젯 가져 오기 modules.data.models에서 serializer 가져 오기 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'),
)

34
settings.py INSTALLED_APPS에 "rest_framework"가 나열되어 있습니까?
Scott Woodall 2014 년

Noobest 실수. 감사합니다.
python-coder

또 다른 의심이 있습니다. 양식에 일부 데이터를 게시하고 해당 값으로 DB를 누르고 결과를 얻으려면 어떻게 양식을 얻습니까? How do I get the form?
python-coder

@ScottWoodall 답변을 게시하고 몇 가지 포인트를 얻으십시오!
Udi

답변:


284

rest_framework나열되어 있는지 확인하십시오 settings.py INSTALLED_APPS.


DRF의 종속성을 등록하지 않은 경우에도 발생할 수 있습니다. 내 경우에는 내가 추가했다 'django_hstore',INSTALLED_APPS.
shacker jul.

5

나를 rest_framework/api.html위해, 손상된 설치 또는 다른 알 수없는 이유로 인해 파일 시스템에서 실제로 누락되었습니다. 재설치 djangorestframework하면 문제가 해결되었습니다.

$ pip install --upgrade djangorestframework

1
나에게도 같은 일이 일어났습니다. 명령은 호환되지 않을 수있는 버전으로 업그레이드됩니다 (setup.py 및 / 또는 requirements.txt에 달리 명시되어 있더라도). pip 제거 / 설치를 시도하거나 정확한 버전을 지정할 수 있습니다.
Jorge Vargas

5

DRF는 요청 된 것과 동일한 형식으로 데이터를 반환하려고 시도합니다. 브라우저에서 이것은 HTML 일 가능성이 높습니다. 대체 응답을 지정하려면 ?format=매개 변수를 사용하십시오 . 예 : ?format=json.

TemplateDoesNotExist브라우저의 API 엔드 포인트를 방문 할 때 오류가 가장 일반적으로 발생하고 당신이 할 수 없습니다 (가)이 rest_framework다른 응답자에 의해 설명 된 바와 같이, 설치된 앱의 목록에 포함되어 있습니다.

앱 목록에 DRF가 포함되어 있지 않지만 HTML Admin DRF 페이지를 사용하지 않으려는 경우이 오류 메시지를 '비활성화'하는 대체 형식을 사용해보십시오.

여기 문서에서 더 많은 정보 : http://www.django-rest-framework.org/topics/browsable-api/#formats


4

하지 귀하의 경우뿐만 아니라 가능한 이유는 사용자 정의됩니다 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.Loaderloaders그것에 대해.

기본적 django.template.loaders.app_directories.Loader으로 loaders.


경고 :? : (1_8.W001) 독립형 TEMPLATE_ * 설정은 Django 1.8에서 더 이상 사용되지 않으며 TEMPLATES 사전이 우선합니다. 다음 설정의 값을 기본 TEMPLATES 사전에 넣어야합니다. TEMPLATE_DEBUG.
andilabs

0

동일한 오류 메시지가 나타납니다. 제 경우에는 백엔드를 Jinja2로 설정했기 때문입니다. 내 설정 파일에서 :

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

이것을 기본값으로 다시 변경하면 문제가 해결되었습니다.

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

rest_framework와 함께 Jinja2 백엔드를 사용하는 방법이 있는지 아직 확실하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.