您如何处理必须在Django中翻译的模板内容?

时间:2019-05-11 03:13:36

标签: python django

我正在尝试呈现下表(请参见屏幕截图):

enter image description here

我有以下模板代码:

       <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)

如您所见,由于以下原因,这非常混乱:

  1. 我的查看代码中有_(来自ugettext_lazy)。
  2. 我必须将字符串包装在format_html中。
  3. 我的view code中有controller code(对分离MVC不利吗?)

如何更好地分离视图和控制器?

0 个答案:

没有答案