我有一个问题,我不知道如何解决它。我得到了这个模板生成/ 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')
如何在其他所需模板中过滤
答案 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)