我需要在一个模板中显示几个模型名称和对象
这是我的视图
def contents(request):
"""Lists contents"""
objects = [
Model1.objects.all(),
Model2.objects.all(),
Model3.objects.all(),
Model4.objects.all(),
]
return render_to_response('content/contents.html', objs
, context_instance=RequestContext(request)
)
和我的模板
{% for objs in objects %}
<div class="content">
<div class="title">{{ objs._meta.verbose_name }}</div>
<ul>
{% for obj in objs %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
</div>
{% endfor %}
当然objs._meta.verbose_name
不能工作
有没有一种方法可以访问这个冗长的名称,而不必为每个模型创建函数或从视图中为每个模型赋值?
发布于 2011-09-16 01:41:23
为了在模板中访问它,您可能已经注意到,Django不允许使用下划线前缀来访问模板中的属性。因此,要访问任何给定对象的详细名称,而不必在每个模型上创建模型方法,最简单的方法是只创建一个模板标记:
@register.simple_tag
def get_verbose_name(object):
return object._meta.verbose_name
无关,但是您的模板中有一个错误,因为您试图访问查询集而不是对象上的_meta属性。所以你的标题行应该看起来像这样:
{% with objs|first as obj %}
<div class="title">{% get_verbose_name obj %}</div>
{% endwith %}
发布于 2019-05-17 06:58:39
标签:
@register.simple_tag
def get_verbose_name(object, fieldnm):
return object._meta.get_field(fieldnm).verbose_name
HTML (year是我的模型中字段的名称)
<td><label class="control-label text-lg text-info"> {% get_verbose_name object 'year' %} </label></td>
多亏了上面的参考。我想分享我的发现,以防其他人正在寻找我为我的情况找到的相同的解决方案。
发布于 2019-10-04 06:42:38
另一种解决方案是将模型的QuerySet
子类化
class SomeQuerySet(models.QuerySet):
@property
def verbose_name(self):
return self.model._meta.verbose_name
class SomeModel(models.Model):
...
objects = SomeQuerySet.as_manager()
class Meta:
verbose_name = 'Some Model'
现在,您可以直接从查询集获取verbose_name
,而无需遍历它:
<h1>{{ objects.verbose_name }}</h1>
{% for objs in objects %}
...
如果您希望直接从模型实例访问verbose_name
,而不是从QuerySet
访问,则还需要在模型中定义一个属性:
class SomeModel(models.Model):
...
objects = SomeQuerySet.as_manager()
class Meta:
verbose_name = 'Some Model'
@property
def verbose_name(self):
return self._meta.verbose_name
https://stackoverflow.com/questions/7432142
复制相似问题