Как правильно использовать шаблоны в качестве переменной в django?
В общем, я хотел использовать TemplateView из Django для предоставления ответов пользователям. Поскольку на моем сайте будет много фреймов с блоками контента в виде отдельных секций, я подумал, что будет очень удобно хранить их в виде объектов класса, каждый из которых будет иметь свои переменные и HTML-файлы (шаблоны). Основная идея заключалась в том, чтобы включить несколько шаблонов в один TemplateView (другими словами, много маленьких TemplateView в одном TemplateView).
Основная проблема, с которой я столкнулся, заключается в том, что переменные context_object_name конфликтуют с именами в других шаблонах. Как можно решить эту проблему? В идеале было бы здорово, если бы переменная могла создаваться локально для конкретного шаблона.
Например, я буду часто обращаться к шаблону rfq-details.html, и их будет много, поэтому было бы идеально, если бы каждое значение таблицы можно было заключить в переменную, которая не будет конфликтовать с другими.
<div class="rfq-details">
<table>
<tr><td>Name </td></tr>
<tr><td>Main Characteristics of the Product </td></tr>
<tr><td>Consumer Characteristics of the Product </td></tr>
<tr><td>Type and Volume of Packaging </td></tr>
<tr><td>Quantity (volume) Requested </td></tr>
<tr><td>Terms of Delivery (INCOTERMS) </td></tr>
<tr><td>Terms of Payment </td></tr>
<tr><td>Expected Price Per Unit of Goods </td></tr>
<tr><td>Compliance with Sanitary and Phytosanitary Standards </td></tr>
<tr><td>Transportation Conditions </td></tr>
<tr><td>Unloading Area </td></tr>
<tr><td>Place of Customs Clearance </td></tr>
<tr><td>The Need for Third-Party Inspection</td></tr>
</table>
</div>
мои разработки в коде:
base.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>{{ data.title }}</title>
<link rel="stylesheet" type="text/css" href="{% static 'styles.css' %}">
<style>
pre {
background-color: #f0f0f0;
border: 1px solid #ddd;
padding: 10px;
font-family: monospace;
white-space: pre-wrap;
word-wrap: break-word;
}
.debug-container {
max-width: 100%;
overflow-x: auto;
}
</style>
</head>
<body>
<div class="debug-container">
<pre>{{ debug }}</pre>
</div>
{% include 'header.html' %}
<div class='content'>
{% for template in data.templates %}
{% include template %}
{% endfor %}
</div>
</body>
</html>
models.py
class Tabs():
context_object_name = 'tabs'
template_name = 'tabs.html'
active_tab = ''
class TabBanner():
context_object_name = 'tab_banner'
template_name = 'tab-banner.html'
name = ''
join_date = ''
button_action = ''
button = ''
class Data(BaseModel):
title: str
templates: List[str] = []
user_avatar: Optional[str] = ''
views.py
class Profile(TemplateView):
template_name = 'base.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
tabs = models.Tabs()
tab_banner = models.TabBanner()
tabs.active_tab = 'profile'
templates = [
'company-banner.html',
tabs.template_name,
tab_banner.template_name,
'tab-profile.html'
]
data = Data(title='Profile', templates=templates)
tab_banner.button = 'edit'
tab_banner.name = 'Profile2'
tab_banner.join_date = 'Join date 12.05.2022'
context[tabs.context_object_name] = tabs
context[tab_banner.context_object_name] = tab_banner
return context
Я пытался создать систему, в которой можно было бы вывести бесконечное количество шаблонов, в которых переменные не пересекались бы друг с другом на обратной стороне, хранить все это в списке объектов класса или что-то в этом роде.