Я пытаюсь сделать следующую таблицу (см. Скриншот):

У меня есть следующий код шаблона:
<table class='table'>
{% for row in task_dashboard_rows %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ row.where_html }}</td>
<td>{{ row.key_html }}</td>
<td>{{ row.value_html }}</td>
</tr>
{% endfor %}
</table>
Я создал абстракционный класс, который будет содержать логику в моем коде представления:
class TaskDashboardRow(object):
def __init__(self, where_html=None, key_html=None, value_html=None):
self.where_html = where_html
self.key_html = key_html
self.value_html = value_html
И где-то в моей функции просмотра у меня есть следующее:
dr = TaskDashboardRow()
dr.where_html = _('Voluum')
dr.set_key_html(is_linking=False, label=_('Create New Lander'))
if self.object.vm_campaign_id:
dr.value_html = format_html(_('<span class="text-success">Not Needed</span>'))
else:
dr.value_html = format_html(
_(
'<ul class="nolist">'
'<li>Name: <b>Campaign:{name}</b></li>'
'<li>URL: <a href="#">{url}</a></li>'
'</ul>'
),
url=absolute(reverse('mediabuying:campaign:money', args=(self.object.pk,))),
name=self.object
)
ret.append(dr)
dr = TaskDashboardRow()
dr.where_html = _('Pangu')
dr.set_key_html(is_linking=False, label=_('Update TA Campaign ID'))
if self.object.ta_campaign_id:
dr.value_html = format_html(_('<span class="text-success">No Need To Update</span>'))
else:
dr.value_html = format_html(
_('<a href="{}">Click here</a> to update ta_campaign_id'),
reverse('mediabuying:campaign:update', args=(self.object.pk,))
)
ret.append(dr)
Как вы можетевидите, это очень запутанно из-за следующих причин:
- У меня есть _ (от
ugettext_lazy
) в моем коде представления. - Я должен обернуть мои строки в format_html.
- У меня
view code
в моем controller code
(плохо для разделения MVC?)
Как можно лучше разделить мой взгляд и контроллер?