Django:在模板上循环遍历对象及其字段

时间:2017-09-13 06:05:35

标签: python django

我想在模板

上做类似的事情
{% for account in integrations %}
   <tbody>
        <tr>
          <td>#</td>
          <td>
            <p>{{ account.label }}</p>
          </td>
        </tr>
      </tbody>
 {% endfor %}

我的views.py文件:

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import NewIntegrationForm
from modules import auth
from models import Worker

# Create your views here.

@login_required
def integrations(request):
    user = request.user
    all_integrations = Worker.objects.filter(user=user)
    if all_integrations != 0:
        return  render(request,
                   'integrations/index.html',
                   {'section': 'integrations', 'integrations': zip(all_integrations)})

我的models.py文件:

from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import User
import uuid

# Create your models here.

class Worker(models.Model):
    user = models.ForeignKey(User,
        on_delete=models.CASCADE,
        )
    a_key = models.CharField(max_length=255)
    a_secret = models.CharField(max_length=255)
    label = models.CharField(max_length=255)
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    def __str__(self):
        return self.id

我的网页返回结果,但它是空的。即一行,但account.label为空。此外,如果我不压缩,它会显示10个空行,而只有一个对象。

4 个答案:

答案 0 :(得分:1)

您的观点应该是:

return render(request, 'integrations/index.html',
             {'section': 'integrations',
              'integrations': Worker.objects.filter(user=user)})

您的模板应该是:

{% if integrations %}
  <table>
    <thead>
      <tr>
          <th>#</th>
          <th>Label</th>
      </tr>
    </thead>
    <tbody>
    {% for account in integrations %}
        <tr>
          <td>{{ forloop.counter }}</td>
          <td>
            <p>{{ account.label }}</p>
          </td>
        </tr>
    {% endfor %}
    </tbody>
    </table>
 {% else %}
    <strong> No records returned </strong>
 {% endif %}     

答案 1 :(得分:0)

你有两个问题。

首先,您使用的是zip。这没有任何意义,你应该放弃它。

其次,在您访问account.link的模板中。您的集成模型没有link字段,因此始终为空。您需要在该模型上使用实际字段或方法。

答案 2 :(得分:0)

使用zip

尝试此操作
{% for account in integrations %}
  <p>{{ account.0.label }}</p>
{% endfor %}

没有zip

{% for account in integrations %}
  <p>{{ account.label }}</p>
  {% for manyy in account.many_to_many_field.objects.all %}
    {{ manyy.somefield }}
  {% endfor %}  
{% endfor %}

答案 3 :(得分:0)

我要做的第一件事是在管理员面板中进行双重检查,如果你没有工人用这个带有空标签的user_id注册,并认为它只有一个记录

如果您的查询只返回一个worker,那么worker table将只映射到一个用户(除非他们可以在不同的项目中工作)

你应该改变

all_integrations = Worker.objects.filter(user=user)

all_integrations = Worker.objects.get(user=user)

尝试简单的打印集成而不循环查看返回的内容,使用zip并且不检查不同的行为,我建议不要使用zip