Ожидаемый вывод не приходит в django
Я пытаюсь удалить мега меню с сайта, используя python beautiful soup frame work !
for i in menu_items('https://natureshair.com.au/'):
print(json.dumps(i, indent=6))
Вывод идет нормально! Я могу переходить на разные уровни меню
Теперь я хочу увидеть результат в браузере, поэтому я использовал фреймворк Django для отображения этого результата в браузере
вот мой код views.py
def say_hello(request):
for i in menu_items('https://natureshair.com.au/'):
return HttpResponse(json.dumps(i, indent=6))
Но я получаю только первый уровень списка меню в браузере! Не знаю, где я что-то упустил
Пожалуйста, дайте мне знать, что я упускаю?
Используйте 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})