как исправить передачу переменной из вида в HTML - PullRequest
0 голосов
/ 29 мая 2019

У меня проблема с передачей переменной 'res' из представления в index.html, она возвращает последний результат на html-странице

Просмотр файла:

def index(request):

    posts = Layout.objects.all()
    urlpost = SiteUrls.objects.all()[:20]


    field_value = SiteUrls.objects.values_list('site_url', flat=True)

    for site_url in field_value:
        print(site_url)
        res = os.system("ping -n 1 " + site_url )

        if res == 0:
            res = "connected"
        else:
            res = "not connected"

    context = {
        'posts':posts,
        'urlpost':urlpost,
        'res': res
    }

    return render (request, 'posts/index.html', context)

HTML-файл:

      <table>
        <tbody>
            {% for SiteUrls in urlpost %}
          <tr>
            <td>{{SiteUrls.site_title}}</td>
            <td>{{SiteUrls.site_url}}</td>

            <td> {{res}} </td>

            <td><a style="margin-bottom:10px" class="waves-effect waves-light btn">open Site</a></td>
          </tr>
            {% endfor %}
        </tbody>
      </table>

я хотел бы получить конкретный результат для каждой строки

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Не используйте .values_list().Вместо этого поработайте с объектами и добавьте свое значение в качестве дополнительного атрибута.

Обратите внимание, что в вашем коде вы ограничиваете свой запрос SiteUrls до 20 объектов, но затем вы пропингуете все SiteUrls в своей БД.Я предполагаю, что вы хотите пропинговать только эти 20 SiteUrls.

def index(request):

    posts = Layout.objects.all()
    urlpost = list(SiteUrls.objects.all()[:20])

    for site_url in urlpost:
        print(site_url.site_url)
        res = os.system("ping -n 1 " + site_url.site_url )

        if res == 0:
            site_url.res = "connected"
        else:
            site_url.res = "not connected"

    context = {
        'posts':posts,
        'urlpost':urlpost,
    }

    return render (request, 'posts/index.html', context)

Шаблон:

  <table>
    <tbody>
        {% for SiteUrls in urlpost %}
      <tr>
        <td>{{SiteUrls.site_title}}</td>
        <td>{{SiteUrls.site_url}}</td>

        <td> {{SiteUrls.res}} </td>

        <td><a style="margin-bottom:10px" class="waves-effect waves-light btn">open Site</a></td>
      </tr>
        {% endfor %}
    </tbody>
  </table>

Кроме того, обычно считается плохой идеей вызывать системные процессы, подобные этому, ввеб-запрос, как вы делаете здесь.Как только вы добьетесь этого, я призываю вас изучить концепцию очередей задач.

0 голосов
/ 29 мая 2019

Может быть, вы можете передать его как временный атрибут:

def index(request):

    posts = Layout.objects.all()
    urlpost = SiteUrls.objects.all()[:20]
    field_value = SiteUrls.objects.values_list('site_url', flat=True)

    for site_url in field_value:
        print(site_url)
        res = os.system("ping -n 1 " + site_url )

        if res == 0:
            site_url.res = "connected"
        else:
            site_url.res = "not connected"

        context = {
            'posts':posts,
            'urlpost':urlpost,
            }

    return render (request, 'posts/index.html', context)

, и вы можете получить доступ к вашему циклу в шаблоне, например:

{{SiteUrls.res}}
0 голосов
/ 29 мая 2019

Если объекты в urlpost и res находятся в одном и том же порядке, вы можете использовать функцию Python zip и объединить их вместе в виде кортежей, а затем перебрать этот список кортежей в своем шаблоне.

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