Django从视图中确定模板中的复选框的值



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

我"list_books.html"Page列出了交给它的所有图书对象。

我在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"的布尔值。

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

任何帮助都将非常感激。

我明白了。我刚刚发送了一个查询参数?archived=true,并让视图检查这个参数,并相应地过滤它们发送到html模板的提交

最新更新