Объединение двух массивов в 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 %}