你可以在Django中传递一个参数给ListView吗?



我正在用Django创建一个Fixture web应用程序。我已经编写了下面的类,它显示了一线队赛程的列表。我可以将其重写为TeamView,然后传递team_id吗?

class FirstView(generic.ListView):
template_name = 'fixtureapp/team.html'
context_object_name = 'fixtures'
def get_queryset(self):
"""return all first team matches"""
return Match.objects.filter(team_id=1).order_by('date')
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data['page_title'] = '1st Team Fixtures'
return data

我有以下url,我如何重写它们以匹配?

urlpatterns = [
path('', views.HomeView.as_view(), name='home'),
path('first', views.FirstView.as_view(), name='first'),
path('second', views.SecondView.as_view(), name='second'),

如你所见,我现在创建了第二个类叫做SecondView这几乎是FirstView的复本,不是很DRY

我可以给你一个简单的工作原理,你可以应用其余的逻辑。基本思路是使用段塞.

在你的html中,你可以用url:

来给标签名
<a href="{% url 'team_by_id' teamid.slug %}"></a>

在urls.py中,得到这个符号:

path('team/<slug:teamid_slug>/', views.TeamView.as_view(), name='team_by_id'),

你的视图应该基于这个段符过滤查询,如果没有给出段符,它将给出所有的Match记录。你可以应用其他适合你的逻辑。

class TeamView(generic.ListView):
queryset = Match.objects.all().order_by('date')
template_name = 'fixtureapp/team.html'
context_object_name = 'fixtures'
def get_queryset(self):
"""return all team_id team matches"""
return Match.objects.filter(team_id__slug=self.kwargs.get('teamid_slug')).order_by('date')

也请查看动态过滤的文档

相关内容

  • 没有找到相关文章

最新更新