Django View возвращает только JSON вместо рендеринга шаблона
В моем Django views.py есть функция, которая должна отрисовывать веб-сайт и возвращать JsonResponse. Обычно, когда я перехожу по URL, я ожидаю увидеть отрисованный сайт. Однако вместо рендеринга шаблона я вижу только JSON-ответ.
def chatbot(request):
if request.method == 'POST':
message = request.POST.get('message')
response = 'hi hi hi'
print(message)
return JsonResponse({'message': message, 'response':response})
return render(request, 'chatbot.html',{'response':response})
Вывод веб-сайта: Вывод веб-сайта
единственное, что я вижу, - это ответ в формате JSON.
Это вполне логично, return
в Python останавливает выполнение кода функции, а возвращает результат следующего за ним выражения, так что в этом случае JsonResponse
.
Но даже если это каким-то образом не так, это не имеет смысла: на HTTP-запрос обычно отвечают одним HTTP-ответом, а не двумя. Как бы вы вообще отреагировали на такой ответ: что бы браузер сделал с двумя ответами?
Если вы хотите работать с AJAX, например, вы обычно работаете с другим представлением для возврата ответа в формате JSON, вы можете абстрагироваться от общей логики.
ваша проблема вызвана неправильным отступом в return render(...)
инструкции.
from django.http import JsonResponse
from django.shortcuts import render
def chatbot(request):
if request.method == 'POST':
message = request.POST.get('message')
response = 'hi hi hi'
print(message)
return JsonResponse({'message': message, 'response': response})
# please ensure this is executed for get requests.
return render(request, 'chatbot.html', {'response': 'hi hi hi'})