Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django滤波器模型的第一个字母_Python_Django - Fatal编程技术网

Python Django滤波器模型的第一个字母

Python Django滤波器模型的第一个字母,python,django,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">

我有一个问题,我不知道如何解决它。我得到了这个生成/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>
如何在您的模板中的另一个所需模板中筛选该模板,请执行以下操作:

<a href="{% url 'list_view' letter=i %}" class="btn">{{i}}</a>
你的看法:

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}

在模板标记模块中,应定义以下简单标记:

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>
{%load my_tags%}
{字母表%中的i的百分比}
{%FilterName i作为FilterObjs%}
//你想干什么就干什么
{%endfor%}

检查此解决方案后,仍然没有解决问题。我忘了显示我的views.py是什么样子,我认为ascii_大写字母是个问题,是真的吗

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)

像这样,您需要在URL.py中提到这一点只是为了澄清:您想显示一个
Anime
数据库对象的列表,按字母顺序排序,对吗?例如,我想之后…/list/W只显示以W字母开头的Anime对象,如果我理解正确。请注意:如果您想澄清您的问题,您应该编辑它,而不是添加新答案。回到你的问题上来。string.ascii_大写返回所有大写字母,您应该从请求对象读取目标后者,例如作为查询字符串或其他。然后,您应该按照如下方式过滤动画对象:(title\uu startswith=latterReadFromRequest)
{% 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>
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)