indeks daftar django wagtail di luar jangkauan

Bisakah Anda membantu saya mengatasi masalah ini. Saya mencoba menambahkan hanya tampilkan judul menu yang diterjemahkan. Dan menambahkan kode ini ke file tag saya:

@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'],
    }

Tapi saya mendapatkan kesalahan ini di halaman: indeks daftar di luar jangkauan dan kode yang disorot

{% top_menu parent=site_root panggilan_halaman=mandiri %}

Menggunakan Wagtail 1.12 dan Python 3.6.2


person Kaijun    schedule 21.09.2017    source sumber


Jawaban (1)


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

Anda tidak memperhitungkan kemungkinan .filter(title = language_code) mengembalikan daftar kosong.

Anda harus menggunakan try-except atau membagi bagian kode ini menjadi beberapa baris dan kemudian memeriksa apakah .filter mengembalikan daftar kosong.

Misalnya:

@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