如何将用户个人资料头像图像渲染到the模板中?

时间:2019-03-01 22:12:00

标签: django-templates wagtail

我正在使用Wagtail CMS创建一个博客网站。每当发布新帖子时,我都想显示作者头像图像。我正在尝试从此/admin/account/change_avatar/位置渲染图像。我可以看到此处上传的图像位于wagtailusers_userprofile -> col name: avatar表下,但不确定如何在模板中进行渲染。

1 个答案:

答案 0 :(得分:1)

该图像不是典型的Wagtail图像(来自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,因此我们在模板中使用它。

我还为alt标记添加了{{ request.user.get_full_name }},因为在这种情况下,图像alt可能应该是用户名,而不是文件名。

如果需要高度或宽度,可以通过{{ request.user.wagtail_userprofile.avatar.height }}{{ request.user.wagtail_userprofile.avatar.width }}来使用。