Używam Django Rest Framework. i ciągle otrzymuję błąd
Exception Type: TemplateDoesNotExist
Exception Value: rest_framework/api.html
Nie wiem, jak się mylę. Po raz pierwszy wypróbowuję REST Framework. To jest kod.
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
z django.forms importuj widżety z rest_framework importuj serializatory z 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
python-coder
źródło
źródło
How do I get the form?
Odpowiedzi:
Upewnij się, że
rest_framework
wpisałeś w swoimsettings.py
INSTALLED_APPS
.źródło
'django_hstore',
doINSTALLED_APPS
.Dla mnie
rest_framework/api.html
faktycznie brakowało w systemie plików z powodu uszkodzonej instalacji lub z innego nieznanego powodu. Ponowna instalacjadjangorestframework
rozwiązała problem:źródło
Należy pamiętać, że fundusz DRF próbuje zwrócić dane w tym samym formacie, którego zażądano. Z Twojej przeglądarki najprawdopodobniej jest to HTML. Aby określić alternatywną odpowiedź, użyj
?format=
parametru. Na przykład:?format=json
.TemplateDoesNotExist
Błąd występuje najczęściej gdy odwiedzasz punkt końcowy API w przeglądarce a ty nie mająrest_framework
zawarte na liście zainstalowanych aplikacji, jak opisano przez innych respondentów.Jeśli nie masz DRF na liście aplikacji, ale nie chcesz korzystać ze strony HTML Admin DRF, spróbuj użyć alternatywnego formatu dla tego komunikatu o błędzie „krok po kroku”.
Więcej informacji z dokumentacji tutaj: http://www.django-rest-framework.org/topics/browsable-api/#formats
źródło
Nie twój przypadek, ale również możliwy powód jest dostosowany
loaders
doDjango
. Na przykład, jeśli masz w ustawieniach (odDjango 1.8
):Django nie będzie próbował przeglądać folderów aplikacji z szablonami, ponieważ powinieneś wyraźnie dodać
django.template.loaders.app_directories.Loader
doloaders
tego.Zauważ, że domyślnie
django.template.loaders.app_directories.Loader
zawarte wloaders
.źródło
Pojawił się ten sam komunikat o błędzie. W moim przypadku było to spowodowane ustawieniem backendu na Jinja2. W moim pliku ustawień:
Zmiana tego z powrotem na domyślne rozwiązała problem:
Nadal nie jestem pewien, czy istnieje sposób na użycie zaplecza Jinja2 z rest_framework.
źródło