TemplateDoesNotExist - Ошибка Django

Я использую 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')

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'),
)

person python-coder    schedule 28.01.2014    source источник
comment
У вас есть rest_framework, указанный в вашем settings.py INSTALLED_APPS?   -  person Scott Woodall    schedule 28.01.2014
comment
Нубестейшая ошибка. Спасибо за это.   -  person python-coder    schedule 28.01.2014
comment
Есть еще одно сомнение. Как мне получить форму в этой форме, чтобы я отправлял некоторые данные в форме, нажимал на БД с этими значениями и получал результат? How do I get the form?   -  person python-coder    schedule 28.01.2014
comment
@ScottWoodall, пожалуйста, отправьте ответ и получите несколько очков!   -  person Udi    schedule 31.01.2014


Ответы (6)


Убедитесь, что в вашем settings.py INSTALLED_APPS указано rest_framework.

person Scott Woodall    schedule 31.01.2014
comment
Также может быть результатом отсутствия регистрации зависимости DRF. В моем случае мне пришлось добавить 'django_hstore', к INSTALLED_APPS. - person shacker; 20.07.2016

Обратите внимание, что DRF пытается вернуть данные в том же формате, который был запрошен. Из вашего браузера это, скорее всего, HTML. Чтобы указать альтернативный ответ, используйте параметр ?format=. Например: ?format=json.

Ошибка TemplateDoesNotExist чаще всего возникает, когда вы посещаете конечную точку API в своем браузере и не включили rest_framework в ваш список установленных приложений, как описано другими респондентами.

Если у вас нет DRF, включенного в ваш список приложений, но вы не хотите использовать страницу HTML Admin DRF, попробуйте использовать альтернативный формат, чтобы скрыть это сообщение об ошибке.

Дополнительная информация в документах здесь: http://www.django-rest-framework.org/topics/browsable-api/#formats

person TheCatParty    schedule 02.10.2015

Для меня rest_framework/api.html фактически отсутствовал в файловой системе из-за поврежденной установки или по какой-либо другой неизвестной причине. Переустановка djangorestframework устранила проблему:

$ pip install --upgrade djangorestframework
person Jace Browning    schedule 21.12.2014
comment
Со мной случилось то же самое. Обратите внимание, что команда обновится до несовместимой версии (даже если в файле setup.py и / или requirements.txt указано иное). Вы можете попробовать удалить / установить pip или указать точную версию. - person Jorge Vargas; 21.01.2015

Не ваш случай, но также возможная причина настроена 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.

person prokaktus    schedule 13.04.2016
comment
ПРЕДУПРЕЖДЕНИЯ:?: (1_8.W001) Автономные настройки TEMPLATE_ * устарели в Django 1.8, и словарь TEMPLATES имеет приоритет. Вы должны поместить значения следующих настроек в ваш шаблон TEMPLATES по умолчанию: TEMPLATE_DEBUG. - person andilabs; 03.12.2016

Я столкнулся с тем же сообщением об ошибке. В моем случае это было связано с настройкой бэкэнда на Jinja2. В моем файле настроек:

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

Возврат к значению по умолчанию устранил проблему:

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

Все еще не уверен, есть ли способ использовать бэкэнд Jinja2 с rest_framework.

person calico_    schedule 14.09.2018

Мы можем получить ошибку, даже если не добавили rest_framework в установленные приложения. Поэтому, пожалуйста, проверьте и это, если вы столкнулись с ошибкой.

person user15567716    schedule 06.04.2021
comment
Добро пожаловать в stackoverflow. Вопросу примерно 8 лет, и на него уже есть принятый ответ. - person RajeshM; 06.04.2021