In meiner Ansichtsfunktion möchte ich ein JSON-Objekt (data1) und etwas Text / HTML (Formular) zurückgeben. Ist das möglich?
MEIN Code
@api_view(['POST'])
@permission_classes((AllowAny,))
def create_user(request):
if request.is_ajax():
if request.method == 'POST':
serializer = SignupSerializer(data=request.data)
print 'ser'
print serializer
if not serializer.is_valid():
return Response(serializer.errors,\
status=status.HTTP_400_BAD_REQUEST)
else:
serializer.save()
data={'status': 'Created','message': 'Verification email has been sent to your email. Please verify your account.'}
return Response(data, template_name='register.html')
else:
return HttpResponse('hello world')
Wenn ich die URL aufrufe, erhalte ich den Statuscode 500 mit dem unten gezeigten Fehler
TemplateDoesNotExist rest_framework / api.html
Wenn ich als API überprüfe, erhalte ich eine Antwort mit dem Status 200 OK. Dies zeigt, dass ich meine HTML-Seite nicht bekommen kann
Wie soll ich mein HTML bekommen, je nach Anfrage
Danke im Voraus
pip install djangorestframework
Stellen Sie sicher, dass Sie rest_framework installieren und in die Datei settings.py aufnehmenINSTALLED_APPS = [ 'rest_framework', ]
quelle
Ich habe dieses Problem beim Upgrade von einer alten Django-Version auf Django 2.0 festgestellt. Meine
settings.py
hat keinen habenTEMPLATE
Richtlinie überhaupt, so dass ich die folgenden von einem neuen verhaktdjango-admin.py startproject ...
Lauf:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, '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', ], }, }, ]
Fügen Sie das zu Ihrem hinzu,
settings.py
wenn Sie keineTEMPLATES
Direktive in Ihrem habensettings.py
. Hat für mich gearbeitet.quelle
Dies ist mein Versuch, das Problem zu erklären und die Antworten aller anderen in einer einzigen Liste zusammenzufassen. Vielen Dank an alle, die mir die Schultern zum Stehen gegeben haben!
Ich glaube, das passiert, weil Django REST Framework eine Vorlage (
rest_framework/api.html
) rendern möchte , aber die Vorlage nicht gefunden werden kann. Es scheint zwei Ansätze zu geben, um dies zu beheben:Ansatz 1: Lassen Sie Vorlagen funktionieren
Stellen Sie sicher, dass das REST-Framework enthalten ist
INSTALLED_APPS
insettings.py
:INSTALLED_APPS = [ ... 'rest_framework', ... ]
Und stellen Sie sicher, dass
APP_DIRS
es sichTrue
in Ihrer Vorlagenkonfiguration befindet (standardmäßig,False
wenn nicht angegeben). Dadurch kann Django in installierten Anwendungen nach Vorlagen suchen. Hier ist eine minimale Konfiguration, die zu funktionieren scheint, obwohl Sie hier möglicherweise mehr Konfiguration haben:TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'APP_DIRS': True, }, ]
Ansatz 2: Geben Sie eine JSON-Antwort zurück
Wenn Sie REST Framework anweisen, eine JSON-Antwort zu rendern, muss keine Vorlage verwendet werden, sodass Sie die
APP_DIRS
Einstellungen nicht wie oben beschrieben ändern müssen . Es scheint auch so, als müssten Sie rest_framework möglicherweise nicht einmal auflistenINSTALLED_APPS
, obwohl es aus anderen Gründen möglicherweise erforderlich ist, es dort zu haben.Sie können dies global in settings.py tun:
REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', ] }
Wenn Sie den
@api_view
Dekorator verwenden, können Sie JSONRenderer für jede Ansicht angeben:@api_view(['GET']) @renderer_classes([JSONRenderer]) def some_view(request): return Response({'status': 'yay'})
Weitere Informationen finden Sie in der Dokumentation zu REST Framework-Renderern .
quelle
Ich bin auf dasselbe Problem gestoßen und habe festgestellt, dass rest_framework nicht zu den installierten Apps in settings.py hinzugefügt wurde. Durch Hinzufügen wurde mein Problem behoben.
quelle
Versuchen
'rest_framework'
SieINSTALLED_APPS
, außer in Ihrem hinzuzufügen, Folgendes in Ihrem hinzuzufügenTEMPLATES.OPTIONS
:'loaders': [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader' ],
quelle
Hinzufügen dieses Dekorators über dieser Ansicht @renderer_classes ([JSONRenderer])
quelle
Ich hatte auch das gleiche Problem. Stellen Sie sicher, dass in Ihrer Einstellung unter "installierte Apps" rest_framework installiert ist.
quelle
Verwenden Sie anstelle von HttpResponse:
from rest_framework.response import Response return Response(data=message, status=status.HTTP_200_OK)
quelle
Ich bin auf das gleiche Problem gestoßen, ich habe eine leere Antwort gesendet. Versuchen Sie eine andere Infomationen einfügen kann
Response()
increate_user
Funktion zu überprüfen , ob es überhaupt funktioniertquelle