Как получить разные данные в одном шаблоне? (django)
Сценарий моего проекта - Есть различные примеры, каждый пример имеет различные части, которые будут отображаться в аккордеонах, сейчас я разработал базу данных и генерирую динамические аккордеоны в зависимости от количества моих записей данных.
Каждая
часть (аккордеон) имеет две колонки, первая колонка для текстовых данных, вторая колонка для медиа данных. Каждая часть имеет различный формат данных, как получить данные в этот единый шаблон?МОДЕЛИ
# Create your models here.
class CaseStudy_List(models.Model):
CaseStudy_id = models.IntegerField(primary_key=True)
title = models.CharField(max_length=255)
def __str__(self):
return self.title
class CaseStudy_Parts(models.Model): #accordians
case_study = models.ForeignKey(CaseStudy_List, on_delete=models.CASCADE)
CaseStudy_part_id = models.AutoField(primary_key=True)
CaseStudy_order = models.IntegerField(default="")
CaseStudy_title_accordian = models.CharField(max_length=255)
def __str__(self):
return self.CaseStudy_title_accordian
class CaseStudy_Content(models.Model): #column 1 - text area
case_study_part = models.ForeignKey(CaseStudy_Parts, on_delete=models.CASCADE, null=True)
content_title = models.CharField(max_length=255, default="")
content_text = models.TextField(blank=True)
content_link = models.TextField(blank=True)
def __str__(self):
return self.content_title
class CaseStudy_Media(models.Model): #column 2 - Media Area
case_study_part = models.ForeignKey(CaseStudy_Parts, on_delete=models.CASCADE, null=True)
# case_study = models.ForeignKey(CaseStudy_List, on_delete=models.CASCADE)
content_img = models.ImageField(upload_to='casestudy/images', default="")
class CaseStudy_Buttons(models.Model):
content = models.ForeignKey(CaseStudy_Content, on_delete=models.CASCADE)
button_id = models.CharField(max_length=255)
button_label = models.CharField(max_length=255)
ПРОСМОТРОВ
def casestudy(request, CaseStudy_id ):
casestudy_object = get_object_or_404(CaseStudy_List, CaseStudy_id = CaseStudy_id) #for list
casestudy_parts_obj = CaseStudy_Parts.objects.filter(case_study=casestudy_object).order_by('CaseStudy_order').distinct() #for accordians
parts_data = [] #storing in a singlist to avoid duplicacy
for part in casestudy_parts_obj:
part_content = CaseStudy_Content.objects.filter(case_study_part = part)
part_media = CaseStudy_Media.objects.filter(case_study_part = part)
parts_data.append({
'part': part,
'content': part_content,
'media': part_media
})
context = {
'casestudy_object': casestudy_object,
'parts_data': parts_data,
}
return render(request, 'casestudy.html', context)
HTML
<div class="page-layout">
<div class="accordion" id="accordionPanelsStayOpenExample">
{% for part_data in parts_data %}
<div class="accordion-item">
<h6 class="accordion-header" id="heading{{ part_data.part.CaseStudy_part_id }}">
<button class="accordion-button {% if not forloop.first %}collapsed{% endif %}" type="button"
data-bs-toggle="collapse" data-bs-target="#collapse{{ part_data.part.CaseStudy_part_id }}"
aria-expanded="{% if forloop.first %}true{% else %}false{% endif %}"
aria-controls="collapse{{ part_data.part.CaseStudy_part_id }}">
{{ part_data.part.CaseStudy_title_accordian }}
</button>
</h6>
<!-- <div id="panelsStayOpen-{{ part_data.part.CaseStudy_part_id }}" class="accordion-collapse collapse show"> -->
<div id="collapse{{ part_data.part.CaseStudy_part_id }}"
class="accordion-collapse collapse {% if forloop.first %}show{% endif %}"
aria-labelledby="heading{{ part_data.part.CaseStudy_part_id }}">
<div class="accordion-body">
<div class="container-area">
<div class="col-content">
<div class='introduction-content'>
<h3>CASESTUDY ID - {{casestudy_object.CaseStudy_id}} </h3><br>
<h3>TITLE - {{ casestudy_object.title }} </h3> <br>
{% for content in part_data.content %}
<h3>OBJECTIVE - {{ content.content_text|safe }}</h3>
{% endfor %}
</div>
</div>
<div class="col-data">
<img src="{{media.content_img.url}}">
</div>
</div>
</div>
</div>
</div>
{%endfor%}
</div>
</div>
ПОЖАЛУЙСТА, ПОМОГИТЕ, СПАСИБО...
Я спрашиваю о своих сомнениях здесь, на stackoverflow, и я так благодарен всем вам, спасибо вам большое.