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