Как вывести аватар профиля пользователя в шаблон трясогузки? - PullRequest
0 голосов
/ 02 марта 2019

Я создаю блог-сайт с использованием Wagtail CMS.Я хотел бы отображать аватар изображения Автора при публикации нового сообщения.Я пытаюсь сделать изображение из этого /admin/account/change_avatar/ местоположения.Я вижу, что загруженное изображение находится здесь под таблицей wagtailusers_userprofile -> col name: avatar, но не знаю, как его отобразить в шаблоне.

1 Ответ

0 голосов
/ 02 марта 2019

Это изображение не является типичным изображением трясогузки (полученное из wagtailimages.Image), оно выглядит как обычное models.ImageField.

Вот что в модели UserProfile для аватара:

class UserProfile(models.Model):

    user = models.OneToOneField(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='wagtail_userprofile'
    )

    avatar = models.ImageField(
        verbose_name=_('profile picture'),
        upload_to=upload_avatar_to,
        blank=True,
    )

Поскольку это обычное поле изображения, вы можете получить URL, добавив .url в свой шаблон.

Вот пример кода шаблона:

{% if request.user.is_authenticated %}
  {% if request.user.wagtail_userprofile.avatar %}
    <img src="{{ request.user.wagtail_userprofile.avatar.url }}" alt="{{ request.user.get_full_name }}">
  {% else %}
    {# No image #}
  {% endif %}
{% endif %}

Приведенный выше код проверит, прошел ли аутентификация пользователя в шаблоне.Если тебе это не нужно, брось это.

Затем существует оператор if для проверок request.user.wagtail_userprofile.avatar.wagtail_userprofile происходит из поля user на модели UserProfile.Он использует related_name, поэтому мы используем это в шаблоне.

Я также добавил {{ request.user.get_full_name }} для тега alt, потому что в этом случае изображение alt, вероятно, должно быть именем пользователя, а не именем файла.

Если вам нужна высота или ширина, они оба доступны через {{ request.user.wagtail_userprofile.avatar.height }} и {{ request.user.wagtail_userprofile.avatar.width }}.

...