Depois de um tempo consegui me responder kkk
quando usamos {{ post.author.imagem }}
, ele só mostra o nome do arquivo, tipo uma string: "perfil/imagem1.jpg"
.
quando usamos .url {{ post.author.imagem.url }}
, o Django tenta acessar o arquivo real dentro da pasta media/perfil/
. Se esse arquivo não existir lá, ou se o campo tiver vazio, dá erro.
Garante que teu model de usuário tem isso aqui:
imagem = models.ImageField(upload_to='perfil/', null=True, blank=True)
Confere se o arquivo realmente existe em media/perfil/imagem1.jpg
.
Se não existir, o .url
vai quebrar mesmo.
No template, protege assim pra não dar erro:
{% if post.author.imagem and post.author.imagem.name %}
<img src="{{ post.author.imagem.url }}" alt="{{ post.author.first_name }}"
class="rounded-circle" style="width: 50px; height: 50px; margin-right: 20px;">
{% endif %}
Aí ele só tenta mostrar a imagem se ela realmente existir de verdade, não só o nome.