我有一个变量:
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'>
这是我在终端中从“打印”声明中显示的内容。
答案 0 :(得分:3)
没有理由,根据您提供的模板代码,您应该收到该错误。最有可能的是,你的模板中还有其他东西正在造成这种情况。
至于你的第二个问题,获得课程名称的方法是:
some_class.__name__
但是,Django模板引擎不允许您在模板中使用下划线属性,因此您最好的选择是在视图中准备一个正确的列表:
linked_models = [m2m.related.parent_model.__name__ for m2m in mymodel._meta.many_to_many]
然后,只需在模板中循环显示,所有工作都已完成。
更新(根据评论)
尽管你有几个选择,但你的方式大致相同。
您可以执行元组列表并将其解压缩到模板中:
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 %}
创建字典列表并引用模板中的键:
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 %}