Питон для цикла, где должны выполняться оба оператора if - PullRequest
0 голосов
/ 18 сентября 2018

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

У меня есть таблица django, которая состоит из IP-адресов и должна в режиме реального времени показывать, какие из них разрешены или не разрешены в данный момент, ив зависимости от состояния, если адрес разрешен, измените его статус на «не разрешен» и наоборот.

Для этой функции у меня есть столбец флажка, который собирает значения столбца строки (например, IP-адрес, идентификатор и т. д.), когда онпроверяется и публикует сообщения с кнопкой «Отправить».По сути, мне нужно выполнить команды telnet, разрешить / не разрешить ip с помощью флажка.

В views.py я собираю идентификаторы флажка с помощью: pks = request.POST.getlist ("Checkbox").

Затем я получаю значения столбцов строк в списках.

selected_objects = Model.objects.filter(pk__in=pks)
result = [selected_objects.get(pk=item).column name for item in pks]
result2=...

После этого я запускаю скрипт telnet.Здесь я получаю конфигурацию маршрутизатора в виде списка, который я сравниваю с IP-адресами в таблице (оператор if для конфигурации loop-prefix_list-router / liste-selected table ips).Также здесь у меня есть команды tn.write, где я пытаюсь поместить эти значения списка.Пример:

tn.write(b"no ip prefix-list LISTNAME seq " + result[y].encode('ascii') + b" permit " +result1[y].encode('ascii') + b"\n")

И здесь цикл for входит в игру, потому что я должен пройти по этим спискам (у - индекс):

for y in range(len(result)):
    if [item for item in liste if item in prefix_list]:
        tn.write(b"no ip prefix-list LISTNAME seq " + result[y].encode('ascii') + b" permit " +result1[y].encode('ascii') + b"\n")
        time.sleep(1)
    if [item for item in liste if item not in prefix_list]:
        tn.write(b"ip prefix-list LISTNAME seq " + result[y].encode('ascii') + b" permit " +result1[y].encode('ascii') + b"\n")
        time.sleep(1)   

Пока все работает, кроме случаякогда я, например, разрешаю один IP-адрес и не разрешаю другой (скрипт работает, когда я только разрешаю или только не разрешаю).

Я ни в коем случае не эксперт, поэтому не стесняйтесь сообщать мне, что я делаю неправильно или могу сделать лучше.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я нашел решение для моей проблемы.Исправили это, выполнив два сравнения и выполнив два цикла for.

0 голосов
/ 18 сентября 2018

если один из операторов if является истинным, он игнорирует второй оператор if

То, что вы описываете, неверно, вы путаете его с конструкцией if elif(else if).

Пример:

x = 3
if x<5:
    print("<5")
elif x<10:
    print("<10")

против

x = 3
if x<5:
    print("<5")
if x<10:
    print("<10")

В первом примере будет напечатано только <5, потому что условие if выполняется, поэтому elif не тестируется.Во втором примере у вас есть два отдельных условия, которые оцениваются независимо.Поэтому будет напечатано как <5, так и <10, поскольку оба условия выполнены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...