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

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

выход идет нормально, когда я пробовал в VScode!

здесь код

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

И вот результат, скрипт может отбраковать все меню

menu

Теперь я пытаюсь собрать этот сайт и вывести результаты с помощью Django! Странно, но если я использую тот же сайт, то вывод будет пустым!

вот код :

def product(request):
    finaldata=request.GET["title"]
    finaldata1=request.GET["title1"]
    finaldata2=request.GET["title2"]
    results = list(
        item
        #for link in ('https://natureshair.com.au/', 'https://www.trafficradius.com.au/')
        for link in (finaldata,finaldata1,finaldata2)
        for item in menu_items(link))
    return JsonResponse({'results': results})

Выход: empty output

def to_dict(r):
   if all(isinstance(i, dict) for i in r):
      return {a:b for i in r for a, b in i.items()}
   if all(isinstance(i, list) for i in r):
      return [i for b in r for i in b]
   return r

def get_menu(page_name):
   if page_name.name == 'li':
      #collect all li values, create a dictionary if li has a ul child
      li_text = []
      for i in page_name.contents:
         if isinstance(i, bs4.element.NavigableString) or i.select_one('ul') is None:
           if (t:=i.get_text(strip=True)): #default li text
              li_text.append(t)
         else: #li contains a ul, build a dict with li's text as key
            if li_text:
               li_text.append({li_text.pop():to_dict([*get_menu(i)])})
               
            else:
               yield to_dict([*get_menu(i)])
      yield from li_text
      return
   all_text = []
   for i in page_name.contents:
      if getattr(i, 'name', None) == 'ul':
         r = [*get_menu(i)] #get ul's li values
         e, flag = i, False
         while (e:=e.previous_sibling) is not None: #check if ul has descriptive text
           if (isinstance(e, bs4.element.NavigableString) or e.select_one('ul') is None) and e.get_text(strip=True):
              yield {e.get_text(strip=True):to_dict(r)} #yield back dictionary if text exists
              flag = True
              break
         if not flag: yield to_dict(r)
      elif not isinstance(i, bs4.element.NavigableString):
         yield from get_menu(i) #recursively traverse element

def menu_items(link):
   page = bs4.BeautifulSoup(requests.get(link).text, 'html.parser')
   for nav in page.select('nav'): #find all `nav` elements from which to anchor search
      yield to_dict([*get_menu(nav)])

Примечание: это не работает для нескольких сайтов, таких как 'https://natureshair.com.au/', и это работает нормально в коде VS!

Не уверен, где я ошибаюсь

Здесь ссылка на мой проект Мой проект

Вернуться на верх