Estou usando o Django Rest Framework. e continuo recebendo um erro
Exception Type: TemplateDoesNotExist
Exception Value: rest_framework/api.html
Não sei como estou errando. Esta é a primeira vez que estou testando o REST Framework. Isso é 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
from django.forms importe widgets de rest_framework import serializers from 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'),
)
python
django
django-rest-framework
codificador python
fonte
fonte
How do I get the form?
Respostas:
Certifique-se de ter
rest_framework
listado em seusettings.py
INSTALLED_APPS
.fonte
'django_hstore',
aINSTALLED_APPS
.Para mim,
rest_framework/api.html
estava faltando no sistema de arquivos devido a uma instalação corrompida ou algum outro motivo desconhecido. A reinstalaçãodjangorestframework
resolveu o problema:fonte
Observe que o DRF tenta retornar dados no mesmo formato que foi solicitado. Em seu navegador, é mais provável que seja HTML. Para especificar uma resposta alternativa, use o
?format=
parâmetro. Por exemplo:?format=json
.O
TemplateDoesNotExist
erro ocorre mais comumente quando você está visitando um endpoint de API em seu navegador e não tem orest_framework
incluído em sua lista de aplicativos instalados, conforme descrito por outros entrevistados.Se você não tiver o DRF incluído em sua lista de aplicativos, mas não quiser usar a página HTML Admin DRF, tente usar um formato alternativo para evitar essa mensagem de erro.
Mais informações da documentação aqui: http://www.django-rest-framework.org/topics/browsable-api/#formats
fonte
Não é o seu caso, mas também o motivo possível é personalizado
loaders
paraDjango
. Por exemplo, se você tiver nas configurações (desdeDjango 1.8
):Django não vai tentar olhar pastas aplicações com modelos, porque você deve adicionar explicitamente
django.template.loaders.app_directories.Loader
emloaders
para isso.Observe que, por padrão,
django.template.loaders.app_directories.Loader
incluído emloaders
.fonte
Encontrei a mesma mensagem de erro. No meu caso, foi devido à configuração do back-end para Jinja2. No meu arquivo de configurações:
Alterar de volta para o padrão corrigiu o problema:
Ainda não tenho certeza se existe uma maneira de usar o backend Jinja2 com rest_framework.
fonte