如何遍历对象项列表

时间:2019-05-10 15:13:09

标签: python

我在以下课程中有一些列表项

class productConstructor:

    def __init__(self, name):
        self.product_code = [1,2,3,4]
        self.quantity = [70,50,110,10]
        self.material = ['wood', 'metal', 'cork', 'cardboard']

我需要做的是遍历类中的每个项目,并从列表中选择第一个项目,以便执行以下操作:

product = productConstructor('product')

我希望能够遍历“产品”并能够访问每个项目列表中的第n个索引。这需要与Flask集成,其代码如下所示:

{% for product in product%}
<div>
    <p>{{product.product_code}}</p>
    <p>{{product.quantity}}</p>
    <p>{{product.material}}</p>
</div>
{% endfor %}

Flask代码应为列表中的每个索引生成一个div。例如,每个对象项目列表中都有4个值,因此我希望发生的事情是有4个看起来像这样的divs

div 1: 产品代码= 1,数量= 70,材料=木材

div 2: 产品代码= 2,数量= 50,材料=金属。

...依次类推3和4。

我可以使用 iter next 函数实现类似的功能吗?

1 个答案:

答案 0 :(得分:0)

您可以向__iter__添加productConstructor方法,该方法使用zip对值进行配对,并且yield s个具有所需属性的对象:

class Product:
   def __init__(self, _vals):
      self.__dict__ = dict(zip(['product_code', 'quantity', 'material'], _vals))

class productConstructor:
  def __init__(self):
    self.product_code = [1,2,3,4]
    self.quantity = [70,50,110,10]
    self.material = ['wood', 'metal', 'cork', 'cardboard']
  def __iter__(self):
    yield from map(Product, zip(self.product_code, self.quantity, self.material))

然后,在您的flask应用中:

@app.route('/someroute')
def someroute():
   return flask.render_template('my_template.html', products = productConstuctor())

最后,my_template.html与您的原始照片相同:

{% for product in products%}
<div>
  <p>{{product.product_code}}</p>
  <p>{{product.quantity}}</p>
  <p>{{product.material}}</p>
</div>
{% endfor %}

编辑:map替代:

class productConstructor:
  ...
  def __iter__(self):
    for i in zip(self.product_code, self.quantity, self.material):
       yield Product(i) #calling Product explicitly