"for"(循环)内的复选框,Django
Checkbox inside the "for" (loop), Django
我的复选框 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&subcategory=5&subcategory=6
时,它很有效,但不是来自分页按钮。
所以虽然过滤器中的所有复选框都具有相同的名称,name="subcategory"
我通过更改为 name="{{subcategory}}"
使它们独一无二,现在每个复选框都有唯一的名称,现在点击下一页后,一切都会保留,并且没有像以前那样的问题,
但在视图中,我不知道如何让他们使用聋人的名字
subcatid = request.GET.getlist('subcategory')
您可以将 QueryDict
添加到不包含任何 page
参数的对象:
def subcategory(request, category_url):
# …
reqget = request.GET<strong>.copy()</strong>
reqget<strong>.pop('page', None)</strong>
ctx = {
# …
<strong>'reqget': reqget</strong>
}
return render(request, 'products/subcategory.html', ctx)
然后在模板中,转到 previous/next 页面的链接将 urlencode
reqget
:
<a href="?page={{ products.previous_page_number }}&{{ reqget<strong>.urlencode</strong> }}" aria-label="Previous" tabindex="-1" class="page-link page-link-prev" aria-disabled="true">
我的复选框 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&subcategory=5&subcategory=6
时,它很有效,但不是来自分页按钮。
所以虽然过滤器中的所有复选框都具有相同的名称,name="subcategory"
我通过更改为 name="{{subcategory}}"
使它们独一无二,现在每个复选框都有唯一的名称,现在点击下一页后,一切都会保留,并且没有像以前那样的问题,
但在视图中,我不知道如何让他们使用聋人的名字
subcatid = request.GET.getlist('subcategory')
您可以将 QueryDict
添加到不包含任何 page
参数的对象:
def subcategory(request, category_url):
# …
reqget = request.GET<strong>.copy()</strong>
reqget<strong>.pop('page', None)</strong>
ctx = {
# …
<strong>'reqget': reqget</strong>
}
return render(request, 'products/subcategory.html', ctx)
然后在模板中,转到 previous/next 页面的链接将 urlencode
reqget
:
<a href="?page={{ products.previous_page_number }}&{{ reqget<strong>.urlencode</strong> }}" aria-label="Previous" tabindex="-1" class="page-link page-link-prev" aria-disabled="true">