Django:将模型对象渲染为图像/图标

dfuffjeb  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(141)

我有以下两个Django模型:

class ProjectType(models.Model):
    name = models.CharField("Name", max_length=300, unique=True)

class Project(models.Model):
    name = models.CharField("Name", max_length=300, unique=True)
    project = models.ForeignKey("ProjectType", on_delete=models.CASCADE)

字符串
ProjectType对象可以是“research”、“outreach”、“administrative”等。
我想做的是将ProjectType呈现为一个标准化的图标(例如:一个代表“研究”项目的小烧杯)。
例如,在HTML模板中有以下行:

{{ projet.project_type.as_icon }}


并将其渲染为:

<img src="images/beaker_icon.png"/>


这可能吗?我可以给予如何渲染图像的类方法指导吗?如果可以,这是一个最佳实践吗?

yi0zb3m4

yi0zb3m41#

你可以有这样的东西

class ProjectType(models.Model):
    name = models.CharField("Name", max_length=300, unique=True)

    def get_icon(self):
        if self.name == "research":
            return '<img src="images/beaker_icon.png">'
        elif self.name -- 'outreach':
            return '<img src="images/some_other_icon.png">'

字符串
而在html中,用途:

{{ project.project_type.get_icon | safe }}

如果你可以保存你的图标文件路径作为媒体的地方,你可以有这样的东西。
有一个模型来保存标准图标文件。

class StandardIcon(models.Model):
    name = models.CharField(max_length=50)
    logo = models.ImageField(upload_to=<path>, blank=True, null=True)

    def __str__(self):
        return self.name


然后你可以将其添加到Django admin并上传你的图标,名称字段为researchoutreach
ProjectType模型中,

class ProjectType(models.Model):
    name = models.CharField("Name", max_length=300, unique=True)

    def get_icon(self):
        try:
            logo = StandardIcon.objects.get(name=self.name).logo:
            return logo
        except StandardIcon.DoesNotExist:
            return ""


然后用

<img src="{{ project.project_type.get_icon }}">


这是更安全的,因为你控制数据库输入,文件上传,而不是发送html字符串到html文档。

相关问题