Как получить значение в классовом представлении?

Есть вот такая конструкция, class-based view, как мне получить значение конкретного свойства собственного объекта?
Например значение свойства name или last_accessed? Пробовал методы get_context_data, но не разобрался
models.py
class Author(models.Model):
    salutation = models.CharField(max_length=10)
    name = models.CharField(max_length=200)
    email = models.EmailField()
    last_accessed = models.DateTimeField()

views.py
class AuthorDetail(DetailView):
    model = Author
    template_name = 'author_detail.html'
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@marazmiki
Укротитель питонов
Где получить? В шаблоне, в логике вьюхи? Если внутри вьюхи, то в любом методе, включая пресловутый get_context_data(), можно обратиться к объекту через вызов метода get_object():
def get_context_data(self, **kwargs):
    author = self.get_object()
    kwargs.update(last_accessed=author.last_accessed,
                  name=author.name)
    return super().get_context_data(**kwargs)
Если речь о шаблоне, то по умолчанию переменная с объектом называется незатейливо — object. Соответственно. в тексте шаблона можно писать
Hi, {{ object.name }}, you're seen at {{ object.last_accessed }}
Если не устраивает название object, можно указать имя этой переменной через атрибут context_object_name вашего CBV:
class AuthorDetail(DetailView):
    context_object_name = 'author'
    model = Author
    template_name = 'author_detail.html'
и можно будет писать в шаблоне:
Hi, {{ author.name }}, you're seen at {{ author.last_accessed }}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы