You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django视图如何获取模板checkbox值 保留筛选条件切换归档图书

解决方案

1. 视图层统一归档筛选逻辑

删掉单独的commit_list_archived视图,所有归档筛选逻辑收敛到公共的show_book_list函数,确保不管走哪个筛选入口(按作者、按年份等)都会统一应用归档状态过滤:

def show_book_list(request, blist, template_args, **kwargs):
    # 从请求参数获取归档展示状态,默认展示未归档图书
    show_archived = request.GET.get('archived') == '1'
    # 给当前待筛选的图书列表先加归档条件过滤
    blist = blist.filter(is_archived=show_archived)

    data = { 'genre': None, 'show_archived': show_archived }

    try:
        # 原有筛选逻辑保持不变
        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)

2. 模板层实现带原有参数的归档切换控件

在book_list.html中添加归档切换的GET表单,自动保留当前所有筛选参数,仅修改归档状态:

<!-- 归档切换控件 -->
<form method="get" action="">
    <!-- 遍历当前所有查询参数,生成隐藏域保留原有筛选条件 -->
    {% for key, value in request.GET.items %}
        {% if key != 'archived' %}
            <input type="hidden" name="{{ key }}" value="{{ value }}">
        {% endif %}
    {% endfor %}
    <label>
        <input 
            type="checkbox" 
            name="archived" 
            value="1" 
            onchange="this.form.submit()" 
            {% if show_archived %}checked{% endif %}
        >
        展示已归档图书
    </label>
</form>

这个表单提交后会停留在当前列表页,原有筛选条件全部保留,仅切换归档展示状态,无需额外跳转。

3. 单本归档操作优化(可选)

如果之前的单本归档返回逻辑偶发参数丢失,可以修改归档处理视图的跳转逻辑,直接读取请求头中的来源地址跳转:

def toggle_book_archived(request, book_id):
    book = get_object_or_404(models.Books, id=book_id)
    book.is_archived = not book.is_archived
    book.save()
    # 直接跳转回之前的列表页,完整保留所有查询参数
    next_url = request.META.get('HTTP_REFERER', '/books/')
    return redirect(next_url)

内容的提问来源于stack exchange,提问作者user16541120

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:21:04