如何在 Django 模板中显示所有字典?
How to show all dictionary in template in Django?
我正在使用 IFC,我需要从 .ifc 文件中提取一些数据以显示在 Django 模板中。
模板:
{% extends 'base.html' %}
{% block content %}
<h2>upload</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="document">
<button type="submit">Upload File</button>
</form>
<br>
{{result}}
{% endblock %}
我试过两种方法:
OpenIfcFile = ifcopenshell.open(filepath) #select the file
BrowseIfcProducts = OpenIfcFile.by_type('IfcElement') #search for the attribute 'IfcElement'
for eachproduct in BrowseIfcProducts:
#add the .ifc searched data to dict 'context' with 'result' key
context['result'] =
[
eachproduct.is_a(),
eachproduct.GlobalId,
eachproduct.get_info()["type"],
eachproduct.get_info().get("Name","error"),
]
return render(request, 'upload.html', context)
在这个方法中,由于键 'result' 在每次迭代中都不会改变,所以只存储最后一个项目,在我的模板中我看不到所有项目。
因此,为了解决这个问题,我将结果键连接到迭代器 (i):
i = 1
for eachproduct in BrowseIfcProducts:
context['{} {}'.format('result', i)] = [
eachproduct.is_a(),
eachproduct.GlobalId,
eachproduct.get_info()["type"],
eachproduct.get_info().get("Name","error"),
]
i += 1
return render(request, 'upload.html', context)
但是,不幸的是,模板中没有显示任何内容
我被困在这里,我不知道如何在模板上显示数据,有人可以帮助我吗?
在您引用的模板中 {{ result }}
,但是在您传递给视图的 context
词典中似乎没有 result
的键。
由于您的密钥看起来很随意,您可能只需要一个列表。 (或者如果您不需要复杂的运算符,您可以直接将 BrowseIfcProducts
传递给模板)
object_list = [[x.is_a(), z.GlobalId, x.get_info()["type"], x.get_info().get('name', 'Error')] for x in BrowseIfcProducts]
context['results'] = object_list
并且在模板中您可以使用
{{ results }}
一个小提示 - 如果您使用 Django 调试工具栏,在“模板”部分您可以看到模板可用的所有上下文 - 这可能有助于将来的调试。
我正在使用 IFC,我需要从 .ifc 文件中提取一些数据以显示在 Django 模板中。
模板:
{% extends 'base.html' %}
{% block content %}
<h2>upload</h2>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="document">
<button type="submit">Upload File</button>
</form>
<br>
{{result}}
{% endblock %}
我试过两种方法:
OpenIfcFile = ifcopenshell.open(filepath) #select the file
BrowseIfcProducts = OpenIfcFile.by_type('IfcElement') #search for the attribute 'IfcElement'
for eachproduct in BrowseIfcProducts:
#add the .ifc searched data to dict 'context' with 'result' key
context['result'] =
[
eachproduct.is_a(),
eachproduct.GlobalId,
eachproduct.get_info()["type"],
eachproduct.get_info().get("Name","error"),
]
return render(request, 'upload.html', context)
在这个方法中,由于键 'result' 在每次迭代中都不会改变,所以只存储最后一个项目,在我的模板中我看不到所有项目。
因此,为了解决这个问题,我将结果键连接到迭代器 (i):
i = 1
for eachproduct in BrowseIfcProducts:
context['{} {}'.format('result', i)] = [
eachproduct.is_a(),
eachproduct.GlobalId,
eachproduct.get_info()["type"],
eachproduct.get_info().get("Name","error"),
]
i += 1
return render(request, 'upload.html', context)
但是,不幸的是,模板中没有显示任何内容
我被困在这里,我不知道如何在模板上显示数据,有人可以帮助我吗?
在您引用的模板中 {{ result }}
,但是在您传递给视图的 context
词典中似乎没有 result
的键。
由于您的密钥看起来很随意,您可能只需要一个列表。 (或者如果您不需要复杂的运算符,您可以直接将 BrowseIfcProducts
传递给模板)
object_list = [[x.is_a(), z.GlobalId, x.get_info()["type"], x.get_info().get('name', 'Error')] for x in BrowseIfcProducts]
context['results'] = object_list
并且在模板中您可以使用
{{ results }}
一个小提示 - 如果您使用 Django 调试工具栏,在“模板”部分您可以看到模板可用的所有上下文 - 这可能有助于将来的调试。