python - Django - 模板显示模型 verbose_names & objects

标签 python django templates

我需要在模板中显示多个模型名称和对象

这是我的观点

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 不起作用

有没有一种方法可以访问这个冗长的名称,而不必为每个模型创建一个函数或从每个模型的 View 中分配值?

最佳答案

为了在您的模板中访问它,您现在可能已经注意到 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 %}

关于python - Django - 模板显示模型 verbose_names & objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432142/

相关文章:

python - 为什么 defaultdict(int) 的 dicts 使用这么多内存? (以及其他简单的 python 性能问题)

python通过TCP套接字发送/接收十六进制数据

python - PyQt:我可以制作一个带有图标和文本的工具栏按钮吗?

python - views.py 和 urls.py 不连接来执行功能

C++98 从运算符获取提升结果

c++ - 使用模板定义不同类型之间的操作

python - 找不到 'pip==9.0.1' 分布,应用程序需要该分布

python - mod_wsgi 解析 WSGI 脚本文件失败 |处理 WSGI 脚本时发生异常 |无法导入 'site' 模块

python - 如何根据url请求更改django listview中的模板名称?

javascript - 通过 2 路绑定(bind)在嵌套模板之间切换 polymer