我使用django-taggit的TaggableManager()获得了一个带有genres字段的Concert对象。
我有一个类型索引页面,列出了所有类型和链接:
genres.html:
{% extends 'base.html' %}
{% block content %}
<h1>Genres</h1>
{% for genre in genres %}
<ul class="genres">
<a href="{% url 'concerts:genre_filter' genre=genre.slug %}">
<li>
{{ genre }}
</li>
</a>
</ul>
{% endfor %}
{% endblock %}
每个类型链接到一个新视图,该视图应显示标记有该特定类型的所有音乐会。
calendar.html标题:
{% elif request.resolver_match.url_name == "genre_filter" %}
<h1>Upcoming Events: <em>{{ genre }}</em></h1>
<p class="center">
<a href = "{% url 'concerts:genre_filter_past' genre=genre %}">
Click here to see past events under genre <em>{{ genre }}</em>
</a>
</p>
{% elif request.resolver_match.url_name == "genre_filter_past" %}
<h1>Past Events with <em>{{ genre }}</em> Tag</h1>
<p class="center">
<a href = "{% url 'concerts:genre_filter' genre=genre %}">
Click here to see upcoming events under genre <em>{{ genre }}</em>
</a>
</p>
{% endif %}
以下是所有这些观点:
def genre_filter(request, genre):
now = datetime.datetime.now()
concerts = Concert.objects.filter(genres__name__in=[genre])\
.filter(date__gte=now).order_by('date')
return render(request, 'concerts/calendar.html', {'concerts': concerts,
'genre': genre})
def genre_filter_past(request, genre):
now = datetime.datetime.now()
concerts = Concert.objects.filter(genres__name__in=[genre])\
.filter(date__lt=now).order_by('-date')
return render(request, 'concerts/calendar.html', {'concerts': concerts,
'genre': genre})
def genre_index(request):
genres = Tag.objects.all().order_by('name')
template = 'concerts/genres.html'
return render(request, template, {'genres': genres})
以下是urls.py:
url(r'^genre/(?P<genre>[\w-]+)/$', views.genre_filter, name="genre_filter"),
url(r'^genre/past/(?P<genre>[\w-]+)/$', views.genre_filter_past,
name="genre_filter_past"),
url(r'^genres/index/$', views.genre_index, name="genre_index"),
我的问题来自于我的类型与其slug不匹配,主要是当它是一个两个单词的类型时。例如,流派“世界音乐”正在过滤“世界音乐”并返回零结果。
我一直试图将事情转移很长时间,而且它开始让我发疯。如果我尝试传递类型名称而不是slug(在genres.html中说genre=genre
而不是genre=genre.slug
,我会发现NoReverseMatch
查找错误。如果我尝试更改urls.py采取了slug而不是类型,它搞砸了我所有的其他代码,即使我试图调整它。
我已经五次尝试并重写了这个,试图弄清楚我做错了什么。我真的在这里撕扯我的头发。我很感激任何建议。