如何在 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 中显示上下文对象的字符串表示形式?的主要内容,如果未能解决你的问题,请参考以下文章