我使用以下几行将数据传递到我的模板index.html,model1是我的models.py中的类。
data = model1.objects.all()
return TemplateResponse(request, 'index.html', {'data': data})
我可以使用 for 循环访问前端数据,如下所示
{% for x in data %}
<h3>{{x.name}}</h3>
<h4>{{x.department}}</h4>
{% endfor %}
由于此数据中有多个对象,我的问题是,如果我只想访问具有特定名称的特定对象的部门,我该怎么做?
例如,我在这里使用 for 循环,考虑数据中有两个对象。那么输出将是
name1
department1
name2
department2
所以现在如果我只需要访问 name2 而没有任何循环,我该怎么做?
更新问题:我正在使用 html 更新此问题,以便问题看起来更清晰。
table id="example" class="table table-striped" cellspacing="1" width="100%">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Department</th>
<th>View/Edit</th>
</tr>
</thead>
<tbody>
{% for x in data %}
<tr>
<td>{{x.id}}</td>
<td>{{x.name}}</td>
<td>{{x.department}}</td>
<td>View</td>
<button type="button" class="btn-sm btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
view</button></td>
</tr>
{% endfor %}
</tbody>
这就是我的 html 的样子,我在这里使用数据表。因此,所有数据都会自动捕获到表中。正如您所看到的,每一行都有一个我将实现的 View 按钮。用户单击 View 按钮后,我应该弹出一个模式对话框来显示所有其他详细信息,例如 {{x.dateJoined}} 等我未在表中显示的信息。但是,如果我使用单独的 View 来弹出此对话框,我应该从模板向该 View 发送一个请求,说明用户单击了哪一行(带有某个 ID)。我怎样才能做到这一点?如何将 View 按钮与此处的相应行绑定(bind)?
最佳答案
您需要编写自定义模板标签,它将采用查询集和过滤参数并返回适当的对象,您可以使用 simple_tag :
myapp/templatetags/myapp_tags.py
from django import template
register = template.Library()
@register.simple_tag
def get_model1_object(queryset, **filters):
if not filters:
raise template.TemplateSyntaxError('`get_model1_object` tag requires filters.')
retrun queryset.filter(**filters).first()
然后在模板中:
{% load get_model1_object from myapp_tags %}
{% get_model1_object data name='blah' as obj %}
注意:您的过滤条件可能会产生多个结果,但在 get_model1_object
中,我仅返回第一个对象,假设您的条件将严格一点,根据您的需要进行更改。
关于python - 在 Django 模板中访问模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335671/