Django按模型的第一个字母过滤

时间:2018-02-07 11:05:52

标签: python django

我有一个问题,我不知道如何解决它。我得到了这个模板生成/ list / a,b,c等。我想在这个a,b,c url模型中显示相同的字母。

列表模板

<div class="panel-body anime-list text-center">
    <div class="btn-group btn-group-xs">
        {% for i in alphabet %}
            <a href="{{i}}" class="btn">{{i}}</a>
        {%endfor%}
    </div>
</div>

模型&#39; S

class Anime(models.Model):
    title = models.CharField(max_length=300, unique=True)
    ongoing = models.BooleanField(default=True)
    add_date = models.DateTimeField('date published')

如何在其他所需模板中过滤

3 个答案:

答案 0 :(得分:0)

在你的模板中执行:

<a href="{% url 'list_view' letter=i %}" class="btn">{{i}}</a>

目标是将字母放入视图中,将其作为URL参数在此处完成。

urls.py

url(r'^list/(?P<letter>[a-z])$', list_view, name="list_view"),

您的观点:

def list_view(request, letter=None):
  matches = Anime.objects.all().order_by("title").filter(Q(title__startswith=letter)|Q(title__startswith=letter.upper()))
  return render(request, "your_app/your_template.html", {"matches": matches}

答案 1 :(得分:0)

在模板标签模块中,您应该定义以下简单标签:

from django import template

register = template.Library()

@register.simple_tag
def filterAnime(char):
    return Anime.objects.filter(title__startswith=char)

然后您可以在模板中使用此标记,如下所示:

{% load my_tags %}
<div class="panel-body anime-list text-center">
    <div class="btn-group btn-group-xs">
        {% for i in alphabet %}
            <a href="{{i}}" class="btn">{{i}}</a>
            {%filterAnime i as filterdObjs%}
            //do what ever you want
        {%endfor%}
    </div>
</div>

答案 2 :(得分:0)

检查此分辨率后仍未解决问题。我忘了展示我的views.py看起来如何,我认为ascii_uppercase是一个问题是真的吗?

from django.shortcuts import render
import string
from home.models import Anime


alphabet = string.ascii_uppercase


def list(request):
    context = {'alphabet': alphabet}
    return render(request, 'list/list.html', context)


def list_detail(request):
    anime = Anime.objects.all().filter(title__startswith=alphabet)
    context = {'anime': anime}
    return render(request, 'list/detail.html', context)