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'})
Вернуться на верх