Всем привет!
Думаю, задача весьма тривиальна: нужно чтобы при переходе на страницу с меню автоматически выбирался первый пункт меню, подсвечивался как active и выводилась информация по нему.
Я реализовал такую логику:
- по чистому url (без именованного списка) перехожу на страницу
- Slug принимает по умолчанию значение None
- В представлении проверяется, равен ли Slug None, если да, то пытаемся взять первый объект из qs всех объектов
- Если удается, то передаем его в шаблон
- Если слаг не равен Нон, то передаем его и объект с этим слагом в шаблон
- В шаблоне, если слаг передан, то определяем активный пункт по нему, если нет то по forloop.counter
Мне кажется, что я чрезвычайно перемудрил с этой задачей и можно было сделать в разы проще.
urls.py:url(r'^excursions$', views.excursions, name='excursions'),
url(r'^excursions/(?P<slug>[\S]+)/$', views.excursions, name='excursions')
views.py:def excursions(request, slug=None):
list_of_excursions = models.Excursion.objects.all()
if slug == None:
try:
start_value = models.Excursion.objects.all()[0]
except IndexError:
return render(request, 'ex/excursions.html', {'Error_message': 'Извините, тут пока ничего нет'})
else:
return render(request, 'ex/excursions.html', {'list_of_excursions': list_of_excursions, 'first': start_value})
else:
start_value = get_object_or_404(models.Excursion, slug=slug)
return render(request, 'ex/excursions.html', {'list_of_excursions': list_of_excursions, 'first':start_value, 'slug': slug})
шаблон:{% if Error_message %}
<p>{{Error_message}}</p>
{% else %}
<div class="col-lg-2 col-md-4 col-xs-12">
<ul class="nav nav-pills nav-stacked" >
{% if slug %}
{% for ex in list_of_excursions %}
{% if ex.slug == slug %}
<li class="active"><a href="{% url 'ex:excursions' ex.slug %}">{{ex.name}}</a></li>
{% else %}
<li><a href="{% url 'ex:excursions' ex.slug %}">{{ex.name}}</a></li>
{% endif %}
{% endfor %}
{% else %}
{% for ex in list_of_excursions %}
{% if forloop.counter == 1 %}
<li class="active"><a href="{% url 'ex:excursions' ex.slug %}">{{ex.name}}</a></li>
{% else %}
<li><a href="{% url 'ex:excursions' ex.slug %}">{{ex.name}}</a></li>
{% endif %}
{% endfor %}
{% endif %}
</ul>
</div>
<div class="col-lg-10 col-md-8 col-xs-12">
<div class="center_place">
<h1>{{first.name}}</h1><br>
<p>{{first.text| safe}}</p>
</div>
</div>
{% endif %}