Изглежда знам къде е проблемът, тъй като мога да го заобиколя, но за да го заобиколя, трябва да жертвам функция, която наистина искам да запазя.
Ето съответния код в неработещо състояние:
{% if sections %}
{% for item in sections %}
<a class="sections" href="{% url "sections:generate" item.section.slug %}">{{ item.section.title }}</a>
{% for subsection in item.subsections %}
<p>{{ subsection.title }}</p>
{% endfor %}
{% endfor %}
{% else %}
<p>Error retrieving sections or no sections found</p>
{% endif %}
Проблемната част по-горе е в маркера за връзка. Позволете ми да обясня, като покажа свързания view.py:
def index(request):
sections = Section.objects.all()
context = {
"sections": [],
}
for section in sections:
context.get("sections").append(
{
"section": section,
"subsections": get_subsections(section),
}
)
return render(request=request, template_name="index.html", context=context)
И така, „секции“ е непоносим списък с елементи,съдържащ за всеки предмет речник с два записа. Един, "раздел" и един "подраздел". Има много подсекции за всеки раздел, това е, което наистина искам да изпълня.
Обикновено, когато не се занимавате с подраздели и просто повторението върху списък от секции работи добре. Кодът на шаблона за това ще изглежда нещо като:
{% for section in sections %}
<a href="{% url "sections:generate" section.slug %}">{{ section.title }}</a>
{% endfor %}
ЗАБЕЛЕЖКА! Кодът по-горе работи отлично! Но веднага щом добавям „секции“ като списък на речници и трябва да препратя слугата по item.section.slug страниците спират да се изобразяват.
Моля, консултирайте се.
Отговори:
1 за отговор № 1Опитайте да използвате кортежи:
Изглед:
context["sections"] = [(section, tuple(get_subsections(section))) for section in sections]
Шаблон:
{% for section, subsections in sections %}
<a class="sections" href="{% url "sections:generate" section.slug %}">{{ section.title }}</a>
{% for subsection in subsections %}
<p>{{ subsection.title }}</p>
{% endfor %}
{% endfor %}