Индекс django вне допустимого диапазона

Проблемы улучшения кода: Через 2 недели после улучшения приведенного ниже кода я смог написать приведенный ниже код, но у меня все еще есть проблемы и я не работаю так, как задумано.

Есть 2 основные проблемы

  1. Мне это нравится (j_list = str (hide [1])) Я хочу установить объявление вместо этого я получаю значение 1, которое не решает мою проблему.
  2. Ошибка индекса вне диапазона в контексте [j_list [i]] = j_list [i]

    context = {
            'instance': project,
            'user': user,
        }
        hide = [0,1]
        for i in range(10):
            j_list = "hide" + str(i)
            fp_list  = "fp_list_" + str(i)
            j_list = str(hide[1])
            context[j_list[i]] = j_list[i]
            messages.add_message(request, messages.INFO, j_list)
            messages.add_message(request, messages.INFO, fp_list)
            try:
                fp_list[i] = FP.objects.filter(id__in=group[i][1])
                context[fp_list[i]] = fp_list[i]
                j_list[i] = hide[0]
            except IndexError:
                fp_list[i] == "null"
            return render(request, 'projects_detail.html', context)
    

Старый рабочий код, но он слишком уродлив, и я пытаюсь улучшить себя в соответствии с приведенным выше кодом:

        hide0=1
        hide1=1
        hide2=1
        hide3=1
        hide4=1
        hide5=1
        hide6=1
        hide7=1
        hide8=1
        hide9=1
        try:
            fp_list_0 = FP.objects.filter(id__in=group[0][1])
            hide0 = 0
        except IndexError:
            fp_list_0 = "null"
        try:
            fp_list_1 = FP.objects.filter(id__in=group[1][1])
            hide1 = 0
        except IndexError:
            fp_list_1 = "null"
        try:
            fp_list_2 = FP.objects.filter(id__in=group[2][1])
            hide2 = 0
        except IndexError:
            fp_list_2 = "null"
        try:
            fp_list_3 = FP.objects.filter(id__in=group[3][1])
            hide3 = 0
        except IndexError:
            fp_list_3 = "null"
        try:
            fp_list_4 = FP.objects.filter(id__in=group[4][1])
            hide4 = 0
        except IndexError:
            fp_list_4 = "null"
        try:
            fp_list_5 = FP.objects.filter(id__in=group[5][1])
            hide5 = 0
        except IndexError:
            fp_list_5 = "null"
        try:
            fp_list_6 = FP.objects.filter(id__in=group[6][1])
            hide6 = 0
        except IndexError:
            fp_list_6 = "null"
        try:
            fp_list_7 = FP.objects.filter(id__in=group[7][1])
            hide7 = 0
        except IndexError:
            fp_list_7 = "null"
        try:
            fp_list_8 = FP.objects.filter(id__in=group[8][1])
            hide8 = 0
        except IndexError:
            fp_list_8 = "null"
        try:
            fp_list_9 = FP.objects.filter(id__in=group[9][1])
            hide9 = 0
        except IndexError:
            fp_list_9 = "null"
        context = {
            'instance': project,
            'user': user,
            "fp_list_0": fp_list_0,"fp_list_1": fp_list_1,"fp_list_2": fp_list_2,
            "fp_list_3": fp_list_3,"fp_list_4": fp_list_4,"fp_list_5": fp_list_5,
            "fp_list_6": fp_list_6,"fp_list_7": fp_list_7,"fp_list_8": fp_list_8,
            "fp_list_9": fp_list_9,
            "hide0": hide0,"hide1": hide1,"hide2": hide2,"hide3": hide3,"hide4": hide4,
            "hide5": hide5, "hide6": hide6, "hide7": hide7, "hide8": hide8, "hide9": hide9,
        }
        return render(request, 'projects_detail.html', context)

Вы можете «встроить» часть try-except в цикл for, но это уродливый способ сделать это. Вы можете просто проверить, существует ли этот элемент.

Willem Van Onsem 31.07.2018 15:17

Ты прав. если бы я мог управлять этим кодом, я бы не стал считать до 10 для цикла. Я бы считал до отфильтрованного числа, тогда мне не потребовалось бы попытки, кроме части, как вы упомянули.

ahmet 31.07.2018 15:23
j_list = "hide" + str(i) это строка j_list[i] это буква за индексом в строке, которая является вашей проблемой.
Brown Bear 31.07.2018 15:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
hide_dict = {}
for i in range(0,10):
    hide_dict['hide'+str(i)] = 1

#Do the same with your Fp lists
fp_dict = {}
for i in range(0,10):
    fp_dict['fp_list_'+str(i)] = ""

for key, value in fp_dict.items():
      try:
            fp_dict[key] = FP.objects.filter(id__in=group[int(key.replace('fp_list_',''))][1])
            hide_dict['hide'+(key.replace('fp_list_','') ] = 0
      except IndexError:
            fp_dict[key] = "null"


context = {
            'instance': project,
            'user': user,
            'fp_dict':fp_dict,
            'hide_dict':hide_dict
        }

Тебе лучше использовать словари, чувак, надеюсь, я тебе помог

Большое спасибо за идею, я буду исследовать дальше. Он получает данные и отображается на веб-сайте, когда я использую message.info, но не в таблице, как раньше. По какой-то причине он не отображается в цикле шаблона странно.

ahmet 31.07.2018 15:43

да, поскольку context['fp_dict'] - это объект, который вам нужно перебирать в шаблоне, например, {% for key, value in fp_dict.items %}, то же самое и для hide_dict

ThunderHorn 31.07.2018 15:50

Я повторял fp_list_0 и другие один за другим, хорошо, так лучше, позвольте мне попробовать

ahmet 31.07.2018 15:55

Другие вопросы по теме