在我的博客应用中,我想在帖子的详细信息中显示图像。但是棘手的部分是我想显示与用户名字的首字母相对应的图像。例如,如果用户名是“ Sam”,我想显示字母“ S”图像。我试图在静态文件夹中添加所有字母的头像。然后我尝试
<!--code for displaying image from database--->
{% if post.author.profile.image.url is None %}
<img src="{% static 'images/{{letter}}.png' %}" class='logo3'/>
{% else %}
<img src="{{ post.author.profile.image.url }}" class='logo3'/>
{% endif %}
views.py
def homepage(request):
l=[]
post= Post.objects.all().order_by('-date')
ctr= post.count()
print(ctr)
for i in range(0,ctr):
letter = post[i].author_id[0].lower()
l.append(letter)
return render(request,'layout.html',{'posts':post,'letter':l})
models.py
class Post(models.Model):
title=models.CharField(max_length=100)
desc=models.TextField()
date=models.DateTimeField(auto_now=True)
author=models.ForeignKey(settings.AUTH_USER_MODEL,
to_field="username",on_delete=models.CASCADE)
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
image = models.ImageField(default=None,upload_to='pics')
在我的浏览器中,如果我单击img标签中的inspect,则显示的src为/ media / None
答案 0 :(得分:0)
您正在通过post.author对象访问作者,因此只需在模板中执行post.author.username.0
,就不需要上下文中的字母列表。 Django模板中的name.0
对应于Python中的name[0]
。
编辑:设置为username
字段,替代项为first_name
和last_name
。
答案 1 :(得分:0)
根据用户的名字显示图像的最简单方法是创建div
而不是带有圆角的图像。
{% if post.author.profile.image %}
<img src="{{ post.author.profile.image.url }}" class='logo3'/>
{% else %}
<div class="text-center align-center" style="align-items:center !important;justify-content:center !important;background-color: black;width: 50px;height: 50px;border-radius: 50px">
<p style="padding-top: 25%" >{{ post.author.username.0 }}</p>
</div>
{% endif %}
{{post.author.username.0}}将为您提供用户名的首字母