在帖子的详细信息中显示与用户名的首字母相对应的图像?

时间:2019-06-29 13:53:14

标签: python django

在我的博客应用中,我想在帖子的详细信息中显示图像。但是棘手的部分是我想显示与用户名字的首字母相对应的图像。例如,如果用户名是“ 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

2 个答案:

答案 0 :(得分:0)

您正在通过post.author对象访问作者,因此只需在模板中执行post.author.username.0,就不需要上下文中的字母列表。 Django模板中的name.0对应于Python中的name[0]

编辑:设置为username字段,替代项为first_namelast_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}}将为您提供用户名的首字母