type templatedoesnotexist template get_template dirs python django django-rest-framework

python - templatedoesnotexist - templates dirs django



TemplateDoesNotExist-Error de Django (4)

Asegúrese de tener rest_framework en su settings.py INSTALLED_APPS .

Estoy usando Django Rest Framework. y sigo recibiendo un error

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

No sé cómo me estoy equivocando. Esta es la primera vez que estoy probando las manos en REST Framework. Esto es código

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

desde los widgets de importación de django.forms desde los serializadores de importación de rest_framework desde 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''), )


No es su caso, pero también es posible que haya loaders personalizados para Django . Por ejemplo, si tiene una configuración (desde 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 no intentará mirar las carpetas de aplicaciones con plantillas, ya que debe agregar explícitamente django.template.loaders.app_directories.Loader en los loaders para eso.

Tenga en cuenta que, de forma predeterminada, django.template.loaders.app_directories.Loader incluye en los loaders .


Para mí, rest_framework/api.html faltaba realmente en el sistema de archivos debido a una instalación dañada o alguna otra razón desconocida. Reinstalar djangorestframework solucionó el problema:

$ pip install --upgrade djangorestframework


Tenga en cuenta que el DRF intenta devolver datos en el mismo formato que se solicitó. Desde tu navegador, esto es muy probablemente HTML. Para especificar una respuesta alternativa, use el parámetro ?format= . Por ejemplo ?format=json .

El error de TemplateDoesNotExist se produce con mayor frecuencia cuando visita un punto final de API en su navegador y no tiene el rest_framework incluidos en su lista de aplicaciones instaladas, como lo describen otros encuestados.

Si no tiene DRF incluido en su lista de aplicaciones, pero no desea utilizar la página HTML Admin DRF, intente utilizar un formato alternativo para ''dar un paso al costado'' este mensaje de error.

Más información de los documentos aquí: http://www.django-rest-framework.org/topics/browsable-api/#formats