如何在 Jinja2 中显示上下文对象的字符串表示形式?

Posted

技术标签:

【中文标题】如何在 Jinja2 中显示上下文对象的字符串表示形式?【英文标题】:How to display string representation of a context object in Jinja2? 【发布时间】:2020-05-20 17:26:06 【问题描述】:

我在模型上有一个属性:

@property
def model_name(self):
    """Return the model name."""
    return self._meta.verbose_name

在 Django 模板中,我通过传递 context['model_attr'] = self.model 然后在模板中显示 model_attr.model_name 来显示它。

但是在 Jinja2 中,这会导致 <property object at 0x7f789aba52c0>。如何显示对象的str 表示?

【问题讨论】:

@VorsprungdurchTechnik 不幸的是,@property 不可调用 @WillemVanOnsem:啊,谢谢。已删除评论,并为您的回答点赞。 【参考方案1】:

您需要在此处创建一个 class 属性,例如通过在元类型中实现它:

from django.db import models

class NamedModelMeta(type(models.Model)):

    @property
    def model_name(cls):
        """Return the model name."""
        return cls._meta.verbose_name

那么我们就可以使用这个元类了:

class MyModel(models.Model, metaclass=NamedModelMeta):
    # …

【讨论】:

感谢通过迭代我发现我可以删除 @property 并使用 model_attr.model_name(model_attr) 这种方法不正确吗? @alias51:如果类对象已经存在,那么传递它看起来不是很优雅。也许你可以改为@classmethod

以上是关于如何在 Jinja2 中显示上下文对象的字符串表示形式?的主要内容,如果未能解决你的问题,请参考以下文章

Python Flask模块

在 Jinja2 中,如何测试变量是不是未定义?

如何将选定的命名参数传递给 Jinja2 的包含上下文?

使用 Jinja2 在 GAE 中存储 Javascript 对象

使用 jinja2 时如何将新条目添加到字典对象中?

在 Jinja2 模板中使用 DateTimeFields 显示本地时间 - Django