Как сделать ценовую сортировку товара в Django (Python)? - PullRequest
1 голос
/ 18 июня 2020

Я хочу отсортировать товары по ценам, хранящимся в переменной после извлечения с веб-сайта.

Переменная будет содержать следующие данные.

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 является результатом. html и его код приведен ниже.

результат. 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 голосов
/ 19 июня 2020

здесь следует отметить несколько моментов

1) Язык шаблонов Django медленный, поэтому лучше написать его перед передачей в запрос. 2) Возможно, вам удастся избавиться от a for l oop. В настоящее время это словарь в наборе в списке. 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
...