我想根据从网站提取后存储在变量中的价格对产品进行排序。
该变量将包含以下详细信息。
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来实现
预先感谢。
答案 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