Джанго: информация не обрабатывается для данного условия, если - PullRequest
0 голосов
/ 04 мая 2018

Тег шаблона {% if%} {% endif%} работает неправильно. Мне нужно, чтобы результаты поиска на странице появлялись только после поискового запроса. Но по какой-то причине при загрузке страницы весь существующий контент появляется сразу. Но после запроса фильтр get работает корректно.

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']

1 Ответ

0 голосов
/ 04 мая 2018
Свойство

FilterSet qs возвращает набор фильтров 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 %}
...