Я использую Django, чтобы показать список сообщений. Каждое сообщение имеет поле «is_public», поэтому, если «is_public» одного сообщения равно False, его не следует показывать пользователю. Кроме того, я хочу показать фиксированное количество сообщений на одной странице, но это число может меняться в зависимости от просмотров.
Я решил обрезать набор запросов в шаблоне, так как несколько представлений используют один и тот же шаблон, генерирование его в представлении означает много повторяющихся кодов.
Если написано на python, оно должно выглядеть так:
i=number_of_posts_to_show_in_one_page
while i:
if qs[i].is_public == True:
#show qs[i] to the page
i--
Поскольку шаблон django не поддерживает цикл while и цикл for кажется сложным в управлении, есть ли способ достичь этого? Или я должен сделать это по-другому? (Одна идея - обрезать qs перед циклом) Спасибо!
Обновление:
Я написал этот шаблонный тег для предварительной обработки набора запросов:
@register.simple_tag(takes_context=True)
def pre_process_list(context,list,numbers):
#if not user.has_perm('admin'):
context['result_list']=list.filter(is_public=True, is_removed=False)[0:numbers]
#else:
#context['result_list']=list[0:numbers]
return ''
Перед использованием цикла for в шаблоне я передам набор запросов в этот тег шаблона и воспользуюсь простым циклом for, чтобы показать его результат.
Если в будущем я захочу показать непубличные публикации администраторам (что еще не решено), я могу написать в некоторой логике, например, в комментариях, и по-другому оформить их в шаблоне.