Django:如果给定条件,则不处理信息

Django: the information is not processed for a given condition if

模板标记 {% if %} {% endif %} 无法正常工作。我需要让页面上的搜索结果只出现在搜索查询之后。但由于某种原因,当页面加载时,所有现有内容都会立即出现。但是在获取请求过滤器后工作正常。

views.py

 def search(request):
        place_list = Places.objects.all()
        place_filter = PlaceFilter(request.GET, queryset=place_list)
        return render(request, 'search/user_list.html', {'filter': place_filter})

html

{% if filter.qs %}

<div class="row">
    {% for obj in filter.qs %}
    <div class="col-md-3 admin__block">
    <div class="cover__wrapper">
    <img src="{{ obj.main_photo.url }}" alt="">
    <a href="#"><span>#</span>{{ obj.name }}</a>
    <p>{{ obj.description }}</p>
    </div>                  
    </div>
    {% endfor %}        
</div>

{% endif %}

filters.py

class PlaceFilter(django_filters.FilterSet):
    name = django_filters.CharFilter(lookup_expr='icontains', widget=forms.TextInput(attrs={
            'placeholder': 'Search place', 'class': 'input__search'}))
    class Meta:
        model = Places
        fields = ['name']

FilterSetqs 属性 returns 过滤器集的 queryset。所以总是True。 您可以在模板中使用 request.GET 来检查 GET 是否包含任何请求数据并仅呈现过滤后的数据:

{% if request.GET %}

<div class="row">
    {% for obj in filter.qs %}
    <div class="col-md-3 admin__block">
    <div class="cover__wrapper">
    <img src="{{ obj.main_photo.url }}" alt="">
    <a href="#"><span>#</span>{{ obj.name }}</a>
    <p>{{ obj.description }}</p>
    </div>                  
    </div>
    {% endfor %}        
</div>

{% endif %}