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 el Framework REST. Este es el 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)
modelos.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
de django.forms importar widgets de rest_framework importar serializadores de modules.data.models importar *
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'),
)
python
django
django-rest-framework
codificador de python
fuente
fuente
How do I get the form?
Respuestas:
Asegúrese de haber
rest_framework
incluido en susettings.py
INSTALLED_APPS
.fuente
'django_hstore',
aINSTALLED_APPS
.Para mí, en
rest_framework/api.html
realidad faltaba en el sistema de archivos debido a una instalación corrupta o alguna otra razón desconocida. La reinstalacióndjangorestframework
solucionó el problema:fuente
Tenga en cuenta que el DRF intenta devolver datos en el mismo formato que se solicitó. Desde su navegador, lo más probable es que sea HTML. Para especificar una respuesta alternativa, use el
?format=
parámetro. Por ejemplo:?format=json
.El
TemplateDoesNotExist
error ocurre con mayor frecuencia cuando está visitando un punto final de API en su navegador y no tienerest_framework
incluido en su lista de aplicaciones instaladas, como lo describen otros encuestados.Si no tiene DRF incluido en su lista de aplicaciones, pero no desea usar la página HTML Admin DRF, intente usar un formato alternativo para "omitir" este mensaje de error.
Más información de los documentos aquí: http://www.django-rest-framework.org/topics/browsable-api/#formats
fuente
No es su caso, pero también es posible razón es personalizado
loaders
paraDjango
. Por ejemplo, si tiene en la configuración (desdeDjango 1.8
):Django no va a tratar de ver aplicaciones carpetas con plantillas, ya que debe agregar explícitamente
django.template.loaders.app_directories.Loader
aloaders
por ello.Tenga en cuenta que de forma predeterminada se
django.template.loaders.app_directories.Loader
incluye enloaders
.fuente
Me encontré con el mismo mensaje de error. En mi caso, se debió a configurar el backend en Jinja2. En mi archivo de configuración:
Cambiar esto de nuevo al valor predeterminado solucionó el problema:
Todavía no estoy seguro de si hay una forma de usar el backend de Jinja2 con rest_framework.
fuente