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-шаблон

Вернуться на верх