如何让Django模型变量相对于另一个变量

时间:2016-07-09 18:37:53

标签: python html django jinja2


我是一个尝试新项目的Django新手,我被困住了:(

我有一个视频型号:

class Video(models.Model):
    link = models.CharField(max_length=200)
    title = models.CharField(max_length=200)

我想自动为每个视频生成一个简单的视频缩略图链接。 我首先尝试在模板中生成它,但发现你不能在jinja中使用任何python(是的......我是Django的新手),然后试图将额外的变量直接放在模型中,但没有任何效果:

class Video(models.Model):
    link = models.CharField(max_length=200)
    title = models.CharField(max_length=200)

   image_source = 'http://img.youtube.com/vi/'+ str(link.split('=')[1]) +'/maxresdefault.jpg'

我怎样才能做到这一点?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

在Django模型上设置属性是一种方法。如果您不需要将此图像URL存储在数据库中,则可以执行以下操作:

class Video(models.Model):
    link = models.CharField(max_length=200)
    title = models.CharField(max_length=200)

    @property
    def image_source(self):
        return 'http://img.youtube.com/vi/'+ str(self.link.split('=')[1]) +'/maxresdefault.jpg'

如果你真的需要将它存储在数据库中,那也没关系!您可以尝试覆盖此类的save()方法,如下所示:

class Video(models.Model):
    link = models.CharField(max_length=200)
    title = models.CharField(max_length=200)
    image_source = models.CharField(max_length=250, blank=True)

    def save(self, *args, **kwargs):
        # ensure image_source is always updated 
        self.image_source = 'http://img.youtube.com/vi/'+ str(self.link.split('=')[1]) +'/maxresdefault.jpg'

        super(Video, self).save(*args, **kwargs)