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

ram*_*yan 4 django-templates wagtail

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

Kal*_*ien 8

该图像不是典型的 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,
    )
Run Code Online (Sandbox Code Playgroud)

因为这是一个常规的图像字段,所以您可以通过.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 %}
Run Code Online (Sandbox Code Playgroud)

上面的代码将检查用户是否在模板中通过了身份验证。如果你不需要它,放弃它。

然后if是检查request.user.wagtail_userprofile.avatar存在的语句。将wagtail_userprofile来自user于外地UserProfile模型。它使用 a related_name,所以我们在模板中使用它。

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

如果您需要高度或宽度,这些都可以通过{{ request.user.wagtail_userprofile.avatar.height }}和 获得{{ request.user.wagtail_userprofile.avatar.width }}

  • 谢谢@Kalob Taulien 的解决方案。顺便说一句,我是通过在 [Coding For Everyone](https://www.youtube.com/watch?v=1_yA25ZmNkA&amp;list=PLMQHMcNi6ocsS8Bfnuy_IDgJ4bHRRrvub) Youtube 频道观看您的所有教程来学习 wagtail 的。 (3认同)