Django определяет значение флажка в шаблоне из представлений
Я пытался разработать страницу в Django, которая работает следующим образом.
На моей странице "list_books.html" перечислены все переданные ей книжные объекты.
У меня есть ряд функций в файле views.py, которые определяют, какие значения будут использоваться для определения книг, показанных на этой странице (например, все книги автора, все книги в серии, все книги с одинаковым годом публикации)
ex.
@with_person_email
def book_list_author(request, person):
return show_book_list(request, person.books, { 'author': person })
def show_book_list(request, blist, template_args, **kwargs):
# this is just the defaults, will be replaced by data.update below
data = { 'genre': None }
try:
# filters the list based on the keyword arguments
blist = dataview.book_list(blist, **kwargs)
except dataview.DataViewError as e:
blist = None
data['error'] = str(e)
try:
data['books'] = RequestPages(request, blist, desc=True)
except Exception as e:
if not utils.is_db_regex_exception(e):
raise
data['books'] = None
data['error'] = 'Invalid regex.'
data['genres'] = models.Genre.objects.order_by('kind', 'name')
data.update(kwargs)
data.update(template_args)
return render(request, 'book_list.html', data)
book_list.html имеет цикл for, который проходит через каждую книгу и печатает информацию о ней. Однако у меня есть булево значение в модели книги под названием "is_archived".
Я хочу иметь возможность устанавливать "is_archived" для книги из book_list.html, а также фильтровать показанные книги между заархивированными и нет. В настоящее время я могу сделать обе эти вещи, используя форму, которая вызывает следующую функцию, передающую ей только архивные книги. Однако эта форма не имеет понятия о том, какими были предыдущие критерии для сортировки книг, поэтому она показывает все архивные книги.
def commit_list_archived(request):
return show_commit_list(request, models.Books.objects.filter(is_archived=True), { 'archived': True })
Установка булевого значения осуществляется с помощью простой кнопки, которая вызывает представление, изменяющее булевое поле, а затем возвращает на предыдущую страницу.
Я хочу иметь возможность переключаться между заархивированными и не заархивированными книгами. Я пробовал использовать <input type="hidden" name="next" value="{{ request.path }}">
на форме для архивных сообщений, чтобы определить предыдущие критерии (автор, год, жанр и т.д.), однако это, похоже, не работает.
Я также рассматривал возможность использования флажка, который переключал бы показываемые книги, но я не смог определить, как получить доступ к информации представления формы флажка.
Для чистоты я хотел бы остаться на странице books_list.html, и просто передать ей либо архивные, либо неархивные книги. И снова проблема заключается в том, чтобы найти способ вызвать нужную функцию до и после просмотра архивных книг, чтобы убедиться, что я все еще сортирую по тем же критериям.
Любая помощь будет очень признательна.
Disregard Я разобрался с этим. Я просто отправил параметр запроса ?archived=true и заставил представления проверять этот параметр и соответствующим образом фильтровать коммиты, которые они отправляют в html-шаблон