Объединение двух массивов в Django

Я работаю над веб, который отображает посты (как twitter). В Django views.py я написал код, который создает два массива и назначает массивы для использования в HTML шаблоне. views.py:

def arrays(request):
    allposts = posts.objects.all()
    m = ['empty', 'like', 'unlike', 'like', 'unlike']
    aa = [0, 1, 2, 3, 4]
    return render(request,  "network/index.html" ,{'allposts': allposts, 'm':m, 'aa':aa})

массив (m) представляет, нравится ли каждый пост или нет (каждый объект в массиве имеет расположение, равное id поста), а (aa) представляет id каждого поста в базе данных

в index.html я хочу показать "нравится" или "не нравится" для каждого сообщения в соответствии с расположением в массиве.

в index.html

{% for post in allposts %}
    <div>
    {% for object in aa %}
    {% if object == post.id %}
    <p>{{m.object}}</p>
    {% endif %}
    {% endfor %}

   
    </div>
    {%endfor %}
 

но проблема в том, что я не могу сопоставить массив aa и массив m в шаблоне HTML, но я могу отобразить {{m.1}} вместо {{m.object}}. так как я могу сопоставить эти два массива?

Я не совсем понимаю, что вы имеете в виду под словами "соответствие" и "расположение". Если я не ответил на ваш вопрос, тогда, пожалуйста, уточните, чего вы пытаетесь достичь.

проблема в том, что я не могу сопоставить массив aa и массив m в шаблоне HTML

.

Это неясно, но предполагает, что вы хотите присоединить определенные элементы в m к определенным элементам в aa. Я бы предложил отправлять данные в комбинированном виде, как словарь

new_m = {a: m[a] for a in aa}

в файле index.html я хочу показывать 'like' или 'unlike' для каждого поста в соответствии с расположением в массиве

.

Это тоже немного расплывчато, но предполагает, что вы хотите упорядочить m в соответствии с aa. Вот как это можно сделать:

m = [x for x,_ in sorted(zip(m, aa)]

Последнее, меня еще больше смущает эта строка в шаблоне: {% if object == post.id %} потому что все, что это сделает, это отобразит ваши like, unlike и другие опции только на первых 5 постах.

Есть несколько способов сделать это. Я бы отфильтровал результаты со списком идентификаторов и отсортировал его в том же порядке, что и список aa. Затем перейдите к zip.

def arrays(request):
    aa = [0, 1, 2, 3, 4]
    filtered_posts = posts.objects.filter(id__in=aa).order_by("id")
    m = ['empty', 'like', 'unlike', 'like', 'unlike']
    posts_m_mapping = zip(filtered_posts, m)

    return render(request,  "network/index.html" ,{'posts_m_mapping': posts_m_mapping})

А в вашем шаблоне просто выполните итерацию posts_m_mapping :

{% for post, sentiment in posts_m_mapping %}
   ...
{%endfor %}
Вернуться на верх