簡體   English   中英

django-filter沒有匹配項

[英]django-filter no matches

我在文檔中找不到它,所以我在這里問。 我用django-filter創建了過濾 ,它可以正常工作,但是如果有人選擇沒有對象的過濾器,那么用戶將得到空白頁。 我想添加簡單的段落

沒有條件匹配

如果過濾的對象不存在。

我已經嘗試過使用模板標簽

{%如果filter.qs中的obj!=無%} {%endif%}

但它不起作用。 有人知道怎么做嗎?

filters.py

import django_filters
from .models import Company, COMPANY_TECHNOLOGIES
from django_filters import ChoiceFilter

class CompanyFilter(django_filters.FilterSet):

class Meta:
    model = Company
    fields = ['type', 'city', 'students']

def __init__(self, *args, **kwargs):
    super(CompanyFilter, self).__init__(*args, **kwargs)
    self.filters['type'].extra.update(
        {'empty_label': 'All'})
    self.filters['city'].extra.update(
        {'empty_label': 'All'})
    self.filters['students'].extra.update(
        {'empty_label': 'All'})

comp_list.html

{% extends 'company/base.html' %}
{% block content %}

<div id="filter">
<form action="" method="get" id="submit">
    {{ filter.form.as_p }}
    <input type="submit"/>
</form>
{% for obj in filter.qs %}
<a href="/brands/{{obj.id}}">{{ obj.name }}</a>
    <p>Image {% if obj.image != None %}
    <img src="{{ obj.image.url }}">
    {% endif%}</p>
    <p>Icon {% if obj.icon != None %}
    <img src="{{ obj.icon.url }}" width="30" height="30">
    {% endif%}</p>

    <br> Type: {{  obj.type }} City: {{ obj.city }} Stack: {{  obj.stack }} 

{% if obj not in filter.qs %}
    <p>no matches</p>
{% endif %}
{% endfor %}

{% endblock %}
</div>

views.py

from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone
from .models import Company
from .filters import CompanyFilter
from rest_framework import viewsets
from .serializers import CompanySerializer
# Create your views here.

def comp_list(request):
    f = CompanyFilter(request.GET, queryset=Company.objects.all())
    return render(request, 'company/comp_list.html', {'filter': f})

##def brands(request, slug):
##brands = Company.objects.all()
##return render(request, 'company/comp_view.html', {'brands': brands})

def brands(request, pk):
    brand = get_object_or_404(Company, pk=pk)
    return render(request, 'company/comp_view.html', {'brand': brand})

#rest api


class CompanyViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Company.objects.all()
    serializer_class = CompanySerializer

抱歉,請您花一些時間,我應該直接去Django文檔並使用內置的模板標簽

{% empty %}

我剛剛將其添加到我的comp_list.html中,如下所示

{% extends 'company/base.html' %}
{% block content %}

<div id="filter">
<form action="" method="get" id="submit">
    {{ filter.form.as_p }}
    <input type="submit"/>
</form>
{% for obj in filter.qs %}
{% if obj in filter.qs %}
<a href="/brands/{{obj.id}}">{{ obj.name }}</a>
    <p>Image {% if obj.image != None %}
    <img src="{{ obj.image.url }}">
    {% endif%}</p>
    <p>Icon {% if obj.icon != None %}
    <img src="{{ obj.icon.url }}" width="30" height="30">
    {% endif%}</p>

    <br> Type: {{  obj.type }} City: {{ obj.city }} Stack: {{  obj.stack }} 
{% endif %}
{% empty %}
    <p>no matches</p>
{% endfor %}

{% endblock %}</div>

現在一切正常,如果用戶嘗試使用不匹配的條件過濾對象,他將在<p> No Matches </p>段落中獲得響應

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM