#django #django-views #django-templates
Вопрос:
У меня так много ключей в парах, и я хочу отобразить их в шаблоне, а затем я получил сообщение об ошибке, что for
операторы должны использовать формат for x in y
: for allPosts in allPost1 and allPost2 and allPost3 and allPost4
<!--My html template-->
{% for allPosts in allPost1 and allPost2 and allPost3 and allPost4 %}
....
{% endfor %}
<!--My views template-->
def search1(request):
....
params = {'allPost1': allpost1,'allPost2': allpost2,'allPost3': allpost3,'allPost4': allpost4, 'query': query}
return render(request, "home/search1.html", params)
Комментарии:
1. Вы не можете использовать
and
для цепочки списков/запросов «allPostx», вместо этого вы можете использовать цепочку|add
фильтров docs.djangoproject.com/en/3.2/ref/templates/builtins/#add . Можете ли вы поделиться своим мнением, нужно ли вам создавать 4 разных списка сообщений или вы можете объединить их в один, по вашему мнению?
Ответ №1:
Вы должны связать итеративные объекты в цепочку в своем представлении. Представление реализует бизнес-логику, шаблон-только логику визуализации.
Таким образом, мы можем реализовать это с помощью:
from itertools import chain
def search1(request):
# …
context = {
'allPost1': allpost1,
'allPost2': allpost2,
'allPost3': allpost3,
'allPost4': allpost4,
'allPosts': chain(allpost1, allpost2, allpost3, allpost4)
'query': query
}
return render(request, 'home/search1.html', context)
затем мы визуализируем это с помощью:
{% for post in allPosts %}
…
{% endfor %}
Также довольно странно, что в представлении у вас есть четыре итерации. Обычно вы можете «объединить» итеративные объекты, чтобы получить записи с помощью одного запроса.