在django模板中显示parent_model

时间:2012-02-20 21:38:06

标签: python django

我有一个变量:

m2m_links = mymodel._meta.many_to_many

这包含特定模型中m2m的所有字段。我希望模板显示链接的模型的名称。在我看来,我可以像这样列出表格:

for f in m2m_links:
    print f.related.parent_model

但是在我的模板中,如果我尝试

{% for table in m2m_links %}
    {{ table.related.parent_model }}<br>
{% endfor %}

我收到错误:“渲染时抓住了DoesNotExist”

如何获取要在模板中呈现的表的名称?还有一个问题,我怎么得到这个名字,而不是

<class 'myapp.models.ModelName'>

这是我在终端中从“打印”声明中显示的内容。

1 个答案:

答案 0 :(得分:3)

没有理由,根据您提供的模板代码,您应该收到该错误。最有可能的是,你的模板中还有其他东西正在造成这种情况。

至于你的第二个问题,获得课程名称的方法是:

some_class.__name__

但是,Django模板引擎不允许您在模板中使用下划线属性,因此您最好的选择是在视图中准备一个正确的列表:

linked_models = [m2m.related.parent_model.__name__ for m2m in mymodel._meta.many_to_many]

然后,只需在模板中循环显示,所有工作都已完成。

更新(根据评论)

尽管你有几个选择,但你的方式大致相同。

  1. 您可以执行元组列表并将其解压缩到模板中:

    linked_models = [(m2m.related.parent_model.__name__, m2m.related.parent_model._meta.verbose_name) for m2m in mymodel._meta.many_to_many]
    

    然后,在您的模板中:

    {% for class_name, verbose_name in linked_models %}
        {{ class_name }} {{ verbose_name }}
    {% endfor %}
    
  2. 创建字典列表并引用模板中的键:

    linked_models = [{'class_name': m2m.related.parent_model.__name__, 'verbose_name': m2m.related.parent_model._meta.verbose_name} for m2m in mymodel._meta.many_to_many]
    

    他们,在你的模板中:

    {% for model in linked_models %}
        {{ model.class_name }} {{ model.verbose_name }}
    {% endfor %}