首页 > 解决方案 > Django从视图中确定模板中复选框的值

问题描述

我一直在尝试在 Django 中设计一个如下工作的页面。

我的“list_books.html”页面列出了交给它的所有书籍对象。

我在views.py中有许多函数,它们确定将使用什么值来确定该页面上显示的书籍(即作者的所有书籍,系列中的所有书籍,具有相同出版年份的所有书籍)

前任。

@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”的图书模型上有一个布尔值。

我希望能够在 book_list.html 的书上设置“is_archived”,并过滤在存档和未存档之间显示的书。我目前可以使用一个调用以下函数的表单来完成这两件事,该函数只处理已归档的书籍。但是,此表单不知道之前的图书排序标准是什么,因此它显示了所有已归档的图书。

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 页面上,并将其交给已归档或未归档的书籍。同样,问题是找到某种方法在查看存档书籍之前和之后调用正确的函数,以确保我仍然按照相同的标准进行排序。

任何帮助将非常感激。

标签: pythonhtmldjangoview

解决方案


无视我想通了。我刚刚发送了一个查询参数 ?archived=true 并让视图检查此参数并相应地过滤他们发送到 html 模板的提交


推荐阅读