如何在Django(Python)中对产品进行价格排序?

时间:2020-06-18 13:03:00

标签: python django django-templates

我想根据从网站提取后存储在变量中的价格对产品进行排序。

该变量将包含以下详细信息。

datamatch = [({'name': 'Redmi K20 Pro', 'link': 'www.exp.com', 'imglink': 'www.exp.com', 'price': '26999', 'SITE': 'flipkart'},
 {'name': 'Redmi Note 7 Pro ', 'link': 'www.exp.com', 'imglink': 'www.exp.com', 'price': '13999', 'SITE': 'flipkart'})]

该html文件的名称为result.html,其代码如下。

result.html:

 {% for ab in datamatch %}
     {% for c in ab %}
          {% for a in c|dictsort:"a.price" %}
              <div class="center">
                 <div class="a">
                    <div class="p">
                       <div class="card horizontal col m4 ">
                          <div class="card-stacked">
                             <div class="card-content">
                                <div class="animated bounce">
                                   <div class="card-title black-text text-darken-4">
                                       <h4 style="text-align:left;">{{ a.name}}</h4><h5 style="text-align:left;">{{ a.SITE }}</h5>
                                         <ul style="text-align:left;">
                                             <li>Category: {{ a.link }} </li>
                                             <li>Sale Price: {{ a.price </li>
                                             <li>Image link: {{ a.imglink }}</li>
                                             <li> Availability: <span class="new badge green" >{{ a.imglink }}</span></li></ul>
                                              <a class="waves-effect waves-light btn m" href="{{ a.URL }}" style="align:right;"><i class="large material-icons right">play_arrow </i>View</a>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                {% endfor %}  
            {% endfor %}
        {% endfor %}       `

我尝试使用上面的代码,但未返回任何内容。但是,一旦我删除了 (| dictsort:“ a.price”)重新调整产品,但不按价格降序。

注意:我想借助django代码而不是python来实现

预先感谢。

1 个答案:

答案 0 :(得分:0)

这里要注意的几件事

1)Django的模板语言很慢,因此最好在传递给请求之前编写它。 2)您也许可以摆脱for循环。当前它是列表中集合中的字典。 3)价格是字符串而不是整数。 4)查看模板标记函数dictsort也有帮助

我的建议是在传入请求之前使用它。

#Optionally make this a template tag, however outside of templating language is best.
def dictsort(datamatch):
  new_data_match = []
  for data in datamatch:
    for row in data:
      row['price'] = int(row['price'])
      new_data_match.append(row)

  new_list = sorted(new_data_match, key=lambda k: k['price'])

  return datamatch