Ожидаемый вывод не приходит в django

Я пытаюсь удалить мега меню с сайта, используя python beautiful soup frame work !

for i in menu_items('https://natureshair.com.au/'):
   print(json.dumps(i, indent=6))

Вывод идет нормально! Я могу переходить на разные уровни меню

output

Теперь я хочу увидеть результат в браузере, поэтому я использовал фреймворк Django для отображения этого результата в браузере

вот мой код views.py

def say_hello(request): 
    for i in menu_items('https://natureshair.com.au/'):
       return HttpResponse(json.dumps(i, indent=6))

Но я получаю только первый уровень списка меню в браузере! Не знаю, где я что-то упустил

browser outout

Пожалуйста, дайте мне знать, что я упускаю?

Используйте JsonResponse вместо HttpResponse

from django.http import JsonResponse
def say_hello(request): 
    for i in menu_items('https://natureshair.com.au/'):
        return JsonResponse(i)

Вы перечисляете результаты, но возвращаете ответ с момента получения первого элемента. Таким образом, это означает, что возвращается результат от этого элемента.

Таким образом, вам следует сначала собрать все результаты, а затем выгрузить этот блоб:

def say_hello(request):
    results = list(menu_items('https://natureshair.com.au/'))
    return JsonResponse({'results': results})

или для двух сайтов:

def say_hello(request):
    results = list(
        item
        for link in ('https://natureshair.com.au/', 'https://www.google.com/')
        for item in menu_items(link)
    )
    return JsonResponse({'results': results})
Вернуться на верх