从django中的帖子中获取第一个图像src

时间:2015-06-15 11:43:16

标签: django django-templates django-views

我有一个写博客的模型。我正在为descritpion的{​​{1}}使用wysiwyg编辑器,我可以通过该编辑器在description中插入图像。

class Blog(models.Model):
    title = models.CharField(max_length=150, blank=True)
    description = models.TextField()
    pubdate = models.DateTimeField(default=timezone.now)
    publish = models.BooleanField(default=False)

在管理员中,它看起来像这样:

enter image description here

我想要的是在博客描述中获取第一张图片,并将其显示在模板中,如下所示:

enter image description here

如何从博客说明中获取img src以在模板中使用它?非常感谢您的帮助和指导。谢谢。

views.py:

def blog(request):
    blogs = Blog.objects.all()

    return render(request, 'blogs.html', {
        'blogs':blogs
        })

模板:

  {% for blog in blogs %}
  <div class="blog">
      <p class="blog_date"> {{blog.pubdate}} </p>
      <h2 class="blog_title"> {{blog.title}} </h2>
      <img src="{{STATIC_URL}} ###img src to be included" class="blog_image img-responsive img-thumbnail">


          <a href="blog_detail.html" class="blog_read_more btn btn-info">Read more</a>
      <div class="container">
          <p class="divider">***</p>
      </div>
  </div>
  {% endfor %}

2 个答案:

答案 0 :(得分:1)

就个人而言,我会在收到新博客的帖子时解析HTML以获取图像源,并将其存储到数据库(具有特定字段),这样您之后就不需要这样做了。

我猜这个描述是用HTML编写的,在这种情况下你可以从HTMLParser派生一个类,并实现handle_starttag方法,这样你就可以存储你得到的第一个图像的来源(和否则为默认图像。

答案 1 :(得分:1)

这是一个基本方法,您可以为方便起见进行调整:

在模型中添加first_image字段:

class Blog(models.Model):
    title = models.CharField(max_length=150, blank=True)
    description = models.TextField()
    pubdate = models.DateTimeField(default=timezone.now)
    publish = models.BooleanField(default=False)
    first_image = models.CharField(max_length=400, blank=True)

现在您要做的就是在保存时填充first_image字段,因此模型的save方法应如下所示:

def save(self, *args, **kwargs):
    # This regex will grab your first img url
    # Note that you have to use double quotes for the src attribute
    img = re.search('src="([^"]+)"'[4:], self.description)
    self.first_image = img.group().strip('"')
    super(Blog, self).save(*args, **kwargs)

现在只需在模板中引用它。

这不是一个完全成熟的解决方案,还有其他一些你应该考虑的事情,比如区分笑脸或缩略图或代码片段imr src和实际的img src,但是这个应该为个人使用,你不想限制其他人选择将他们的第一张图像作为封面图片。

希望这有帮助!