В django создание списка случайных объектов с подкачкой - PullRequest
0 голосов
/ 16 апреля 2019

Я пытался получить список объектов модели, рандомизировать их порядок и разбить их на страницы в шаблоне. Я думал, что делал это до тех пор, пока не осознал, что при каждом вызове следующей страницы я повторно рандомизировал объекты, а не использовал ранее рандомизированный список.

Могу ли я в любом случае рандомизировать список объектов только при первом открытии страницы и после этого использовать тот же список, не рандомизируя его при переходе на следующую страницу?

Спасибо.

Views.py

class index(View):
    def get(self, request):
        all_items = list(Electronics.objects.all())
        random.shuffle(all_items)

        paginator = Paginator(items, 24)
        page = request.GET.get('page')
        items = paginator.get_page(page)    

        return render(request, 'home.html', {'items':items, 'header':'Homepage'})

home.html

<div class='container'>
<div class='row'>
{% for item in items %}
        <div class='col-xs-6 col-sm-8 col-lg-4'>
            <img src='{{ item.image.url|cut:"%22"|thumb}}'>
            <h4>{{item.name}}</h4>
            <p>$ {{item.price}}</p>
            <form method='get'>
                <input value='Add to cart' type='submit' formaction= "{% url 'addtocart' item.id %}">
                <input value='View Details' type='submit' formaction= "{% url 'detail' item.id %}">
            </form> 
        <div><br><br>
    {% endfor %}
    </div>
    </div>  

    <div class='pagination' align='center'>
        <span class='step-links'>
            {% if items.has_previous %}
                <a href="?page=1{% if request.GET.q %}&q={{request.GET.q}}{% endif %}">&laquo; first</a>
                <a href="?page={{items.previous_page_number}}{% if request.GET.q %}&q={{request.GET.q}}{% endif %}">previous</a>
            {% endif %}
            <span class="current">
                Page {{items.number}} of {{items.paginator.num_pages}}
            </span>
            {% if items.has_next %}
                <a href="?page={{items.next_page_number}}{% if request.GET.q %}&q={{request.GET.q}}{% endif %}">next</a>
                <a href="?page={{items.paginator.num_pages}}{% if request.GET.q %}&q={{request.GET.q}}{% endif %}">last &raquo;</a>
            {% endif %}
        </span>
    </div>

1 Ответ

0 голосов
/ 16 апреля 2019

Вы можете использовать этот отличный фрагмент для реализации смешанного набора случайных чисел с наборами запросов. Это в основном позволит вам создать GET-запрос к представлению, используя миксин (через URL-адрес, такой как /electronics?page=1), а затем сгенерирует seed, который будет кеширован в вашем session, а затем снова использован для вытащить итеративные наборы записей.

Это не должно быть слишком тяжелым бременем для вашей нагрузки, поскольку кэширование seed стоит недорого - это использование order_by('?'), которое может быть дорогим, но 3-4 тысячи записей не считаются большой для такой задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...