Как показать все категории в одном шаблоне django - PullRequest
2 голосов
/ 11 июля 2020

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

views.py

def matesmain(request):
    if request.user.has_posts():
        action = Mates.objects.filter(categories='action')
        sports = Mates.objects.filter(categories='sports')
        
        context = {
            'action' : action,
            'sports' : sports,
        }
        print("nice3")
        return render(request, 'mates.html', context)

товарищи. html

{% for act in action %}
    {% if act %}
        I have the posts from action category here
    {% endif %}
{% endfor %}
{% for sprt in sports %}
    {% if sprt %}
        I have the posts from sports categpry here
    {% endif %}
{% endfor %}

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Вы можете использовать поиск __in [Django -doc] для поиска Mates объектов, принадлежащих к любой из категорий:

def matesmain(request):
    if request.user.has_posts():
        mates = Mates.objects.filter(
            <b>categories__in=['action', 'sports']</b>
        )
        context = {
            'mates' : mates
        }
        return render(request, 'mates.html', context)
    else:
        # &hellip;

Затем вы можете визуализировать их с помощью:

{% for <b>mate in mates</b> %}
    {{ mate.categories }}
{% endfor %}

Вы можете использовать .order_by('?') [Django -doc] для получить предметы в случайном порядке:

def matesmain(request):
    if request.user.has_posts():
        mates = Mates.objects.filter(
            categories__in=['action', 'sports']
        )<b>.order_by('?')</b>
        context = {
            'mates' : mates
        }
        return render(request, 'mates.html', context)
    else:
        # &hellip;
1 голос
/ 11 июля 2020

Простой способ - присвоить каждой переменной другую переменную, а затем передать новую переменную в контекст, и это всегда будет их перемешивать.

def matesmain(request):
    if request.user.has_posts():
        action = Mates.objects.filter(categories='action')
        new_action = action.order_by('?')
        sports = Mates.objects.filter(categories='sports')
        new_sports = sports.order_by('?')
        
        context = {
            'action' : new_action,
            'sports' : new_sports,
        }
        print("nice3")
        return render(request, 'mates.html', context)
...