我在使用for循环标签时遇到了问题,这对选项卡来说很好,但选项卡内容中对id的引用本身就是问题所在,因为我无法访问{{spec}}中的即时值,现在我如何用导航药丸选项卡自定义我的url以显示与专业化、相关的课程
category_page.html
<!-- This is tabs with for loop for data in specializations worked well-->
<div class="row" >
<div class="list-group col-md-4" role="navigation">
{% for specs in spec %}
<button type="button" class="list-group-item" data-toggle="tab" href="{{ specs }}">{{ specs }}</button>
{% endfor %}
</div>
<!-- Here is the tab content and it doesn't work well as I need data appears related to the tab itself -->
<div class="col-md-8">
<div class="tab-content ">
{% for specs in spec %}
<div id="{{ specs }}" class="tab-pane fade ">
<div class="row">
{% for instances in courses_spec %}
<div class="col-sm-6 col-md-6">
<div class="caption">
<h3>{{ instances.name }}</h3>
</div>
</div>
{% endfor %}
</div>
</div>
视图.py
def categories_pages(request, category_name, speci_name=None):
courses = Course_dir.objects.filter(
availability=True,
id_CO__id_S__name=category_name
).order_by('date')
courses_spec = Course_dir.objects.filter(
availability=True,
id_CO__name=speci_name
).order_by('date')
spec = Specialization.objects.filter(
id_S__name__contains=category_name
).order_by('name')
context = {
"courses": courses,
"spec": spec,
"courses_spec": courses_spec
}
return render(request, 'categories/categories-page.html', context)
urls.py
url(r'^categories/(?P<category_name>[-w]+)/$', views.categories_pages, name='category_detail'),
url(r'^categories/(?P<category_name>[-w]+)/(?P<speci_name>[-w]+)$', views.categories_pages, name='specialization_detail'),
型号.py
class Category(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=300, blank=True)
slug = models.SlugField(default=None)
def get_absolute_url(self):
self.slug = slugify(self.name)
return reverse('category_detail', args=[str(self.slug)])
class Specialization(models.Model):
id_S = models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
slug = models.SlugField(default=None)
def __str__(self):
return self.name
def get_absolute_url(self):
self.slug = slugify(self.name)
return reverse('spec_detail', args=[str(self.slug)])
几件事-
- 您不会在任何地方调用
get_absolute_url
,因此模板将只显示模型的__unicode__
方法(如果是Python 2)或__str__
方法(如果为Python 3)的返回值 -
不要调用
for spec in spec
,使用单独的变量,这样就不会造成名称空间污染和潜在的错误。{% for each_spec in spec %} <button type="button" class="list-group-item" data-toggle="tab" href="{{ each_spec.get_absolute_url }}">{{ spec }}</button> {% endfor %}