我应该如何在模板中创建for循环,以便显示ManyToMany关系?
鉴于:
在models.py我有
class Cycle(models.Model):
cycle_name = models.CharField(max_length=150)
cycle_description = models.CharField(max_length=250)
def __str__(self):
return self.cycle_name + " -- " + self.cycle_description
class Program(models.Model):
program_name = models.CharField(max_length=50)
program_description = models.CharField(max_length=250)
cycles = models.ManyToManyField(Cycle)
is_favourite = models.BooleanField(default="False")
def get_absolute_url(self):
return reverse('programs:program', kwargs={'pk': self.pk})
def __str__(self):
return self.program_name
在views.py中
class AllProgramsView (generic.ListView):
template_name = 'programs/index.html'
context_object_name = 'programs_list'
def get_queryset(self):
return Program.objects.all()
class ProgramDetailView (generic.DetailView):
model = Program
template_name = 'programs/program.html'
在urls.py中
#list of all programs
url(r'^$', views.AllProgramsView.as_view(), name='index'),
#single program page
url(r'^(?P<pk>[0-9]+)/$', views.ProgramDetailView.as_view(), name='program'),
在单个程序页面中,我需要列出该特定程序中包含的所有循环。
我一直在尝试这么多不同的东西,但似乎都不对。 这是我目前对模板的看法,但不起作用:
program.html
<div class="bg-white">
<div class="container text-center text-muted">
<div class="row">
{% if cycle %}
{% for cycle in program.cycles.all() %}
<div class="col-sm-4 py-4">
<div class="card">
<p><h5>{{ cycle.cycle_name }}</h5></p>
<p class="card-text">{{ cycle.cycle_description }}</p>
<a href="" class="btn btn-secondary">Modify it</a>
</div>
</div>
{% endfor %}
{% else %}
<div class="col-sm-12">
<p>No cycles found</p>
</div>
{% endif %}
</div>
</div>
有人可以帮忙吗?感谢。
答案 0 :(得分:1)
我认为你没有上下文,因为if语句是错误的。 而不是
{% if cycle %}
应该是
{%if program.cycles%}