Как я могу преобразовать объект Python в строку, используя контекст?

Я пытаюсь визуализировать экземпляры объектов в шаблонах django так, как это делают формы. Итак, где-то в представлении создается экземпляр объекта: my_object = MyObject() и передается в шаблон в контексте: context['my_object'] = my_object,

Когда шаблон обрабатывается, __str__() метод MyObject вызывается для создания строки для заполнения. MyObject это выглядит примерно так:

def __str__(self):
    """ Render template """
    return mark_safe(
        render_to_string(self.template, {'options': self.options})
    )

Поскольку шаблон объекта хотел бы добавить код в блоки CSS и JS, используя sekizai, мне нужен контекст рендеринга. Есть ли способ (например, с использованием другого метода), чтобы получить этот контекст?

1 ответ

Решение

Я боюсь, что это невозможно, и это не путь Джанго!

Что бы я сделал, это:

  1. Объявите шаблон (названный как mymodel_repr.html).
  2. Напишите в нем, как именно я бы хотел, чтобы меня визуализировали.
  3. Сохраните его среди других шаблонов (возможно, в приложении templates/ папка тоже).
  4. Изменить __str__(self) вернуть required поле или что-то еще.
  5. Теперь каждый раз, когда я хочу напечатать объект (шаблонным способом со всем контекстом) этой модели, я просто include it как это: {% include 'mymodel_repr.html' with obj=obj_i_want_to_print %},

С помощью этого метода вы отделяете бизнес от презентации.

Надеюсь, это поможет вам!

Другие вопросы по тегам