ดัชนีรายการ wagtail django อยู่นอกช่วง

คุณช่วยฉันด้วยปัญหานี้ได้ไหม ฉันกำลังพยายามเพิ่มแสดงเฉพาะชื่อเมนูที่แปลเท่านั้น และเพิ่มโค้ดนี้ลงในไฟล์แท็กของฉัน:

@register.inclusion_tag('home/tags/top_menu.html', takes_context=True)
def top_menu(context, parent, calling_page=None):
    request = context['request']
    language_code = request.LANGUAGE_CODE
    menuitems = parent.get_children().live().in_menu().filter(title = language_code)[0].get_children()
    for menuitem in menuitems:
        menuitem.show_dropdown = has_menu_children(menuitem)
        menuitem.active = (calling_page.path.startswith(menuitem.path)
                           if calling_page else False)
    return {
        'calling_page': calling_page,
        'menuitems': menuitems,
        'request': context['request'],
    }

แต่ฉันได้รับข้อผิดพลาดนี้ในหน้า : รายการดัชนีอยู่นอกช่วงและโค้ดที่เน้นสี

{% top_menu parent=site_root โทร_เพจ=ตนเอง %}

ใช้ Wagtail 1.12 และ Python 3.6.2


person Kaijun    schedule 21.09.2017    source แหล่งที่มา


คำตอบ (1)


parent.get_children().live().in_menu().filter(title = language_code)[0]

คุณไม่ได้คำนึงถึงความเป็นไปได้ที่ .filter(title = language_code) จะส่งคืนรายการว่าง

คุณควรใช้ try-except หรือแบ่งโค้ดส่วนนี้ออกเป็นหลายบรรทัด จากนั้นตรวจสอบว่า .filter ส่งคืนรายการว่างหรือไม่

ตัวอย่างเช่น:

@register.inclusion_tag('home/tags/top_menu.html', takes_context=True)
def top_menu(context, parent, calling_page=None):
    request = context['request']
    language_code = request.LANGUAGE_CODE 
    try:
        menuitems = parent.get_children().live().in_menu().filter(title = language_code)[0].get_children()
    except IndexError:
        menuitems = []
    else:  # you don't actually need to have 'else' in this case
        for menuitem in menuitems:
            menuitem.show_dropdown = has_menu_children(menuitem)
            menuitem.active = (calling_page.path.startswith(menuitem.path)
                               if calling_page else False)
    return {
        'calling_page': calling_page,
        'menuitems': menuitems,
        'request': context['request'],
    }
person DeepSpace    schedule 21.09.2017