【问题标题】:Checkbox inside the "for" (loop), Django“for”(循环)内的复选框,Django
【发布时间】:2021-07-25 06:59:26
【问题描述】:

我的复选框 html:

<form method="GET">
    {% for subcategory in subcategories %}
        <div class="filter-items filter-items-count">  
             <div class="filter-item">
                  <div class="custom-control custom-checkbox">
                        <input type="checkbox" class="custom-control-input" value="{{subcategory.id}}" name="subcategory" id="{{subcategory.id}}" {% if subcategory in subcategories1 %} checked {% endif %}>
                        <label class="custom-control-label" for="{{subcategory.id}}">{{subcategory}}</label>
                     </div><!-- End .custom-checkbox -->
                 <span class="item-count">{{subcategory.products.all|length}}</span>
               </div><!-- End .filter-item -->
          </div><!-- End .filter-items -->
{% endfor %}
<button type="submit" class="btn btn-primary w-100 mt-3">Filter!</button>
</form>

它可以正常制作过滤器。 意见:

subcatid = request.GET.getlist('subcategory')

查询字符串:

?subcategory=5&subcategory=6

它可以是一个或多个,取决于子类别的数量。 但是当我转到下一页时,我想它会变成这样:

?page=2&subcategory=5&subcategory=6

但它会删除我选择的最早的子类别并保留最后一个,只有一个,例如:

?page=2&subcategory=5

当我在 url 字段中手动输入 ?page=2&amp;subcategory=5&amp;subcategory=6 时,它可以正常工作,但不能通过分页按钮。

所以虽然过滤器中的所有复选框都有相同的名称,name="subcategory" 我通过更改为 name="{{subcategory}}" 使它们唯一,现在每个复选框都有唯一的名称,现在点击下一页后,一切都保留了,没有问题前, 但在视图中,我不知道如何用 deafferents 名称获取它们

subcatid = request.GET.getlist('subcategory')  

【问题讨论】:

标签: django checkbox django-views django-templates


【解决方案1】:

您可以向不包含任何page 参数的对象添加QueryDict

def subcategory(request, category_url):
    # …
    reqget = request.GET.copy()
    reqget.pop('page', None)
    ctx = {
        # …
        'reqget': reqget
    }
    return render(request, 'products/subcategory.html', ctx)

然后在模板中,上一页/下一页的链接将urlencodereqget:

&lt;a href="?page={{ products.previous_page_number }}&amp;{{ reqget<strong>.urlencode</strong> }}" aria-label="Previous" tabindex="-1" class="page-link page-link-prev" aria-disabled="true"&gt;

【讨论】:

  • 谢谢。它现在可以工作,但它会在 url 中获得两次查询,例如:/?page=3&amp;subcategory=6&amp;subcategory=6&amp;subcategory=5&amp;subcategory=6
  • @MehranBahrami:您是第二次提交表单吗?我的想法是你被分页卡住了,而不是提交表单。
  • @MehranBahrami:至于表单,我建议使用 Django 表单,也许可以手动渲染。这将确保使用复选框填写表单:请参阅docs.djangoproject.com/en/3.2/topics/forms/…
  • 实际上,每次我点击下一页或上一页时,网址都不清楚,只需在前面的字符串旁边添加相同的内容即可。它正常工作是显示,但发送到视图的列表就像:['6', '6', '6', '6', '6', '6', '5', '6'] 我认为它是因为用于检查选择。但我不提交它们,只是点击下一页或上一页。
  • @MehranBahrami:请提出一个新的问题。包括模板连同(完整)视图,以及重现问题的步骤...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多