Django没有很好地传递上下文



我试图使用上下文传递一个查询集。但在模板页面上,上下文不起作用。由于我在同一视图中实现了两个查询,一个查询集运行良好,但另一个查询传递不好。这是我的看法

# Create your views here.
def xray_result_view(request):
q=query_holding_together.objects.filter(which_user=request.user)
for x in q:  
all_reports=xray_result.objects.get(which_query=x)
print(all_reports.sys_gen_result)
return render(request,'XRay/result.html',{'reports':all_reports})

当q作为模板传递时,它可以正常工作,但并不能适用于所有报告。这是我的模板

{% extends "login/successful.html" %}
{% block middle_window %}
</div>
<div class="container adjust-ment">
<div class="row">
<div class="col-12">
Previous X-ray Results
</div>
</div>
<div class="row">
<div class="col-12">
Result
</div>
</div>
<div class="row">
<div class="col-12">
{% for y in reports.iterator %}
File Name:<br>
Date and Time of Upload:<br>
System Generated Result:{{ y.sys_gen_result }}<br>
Doctor's Comment on Result:{{ y.doctor_comment }}<br>
{% endfor %}

</div>
</div>
</div>
{%endblock middle_window %}

您不是在模板中传递查询集,而是在发送对象。让我解释一下:

for x in q:  
all_reports=xray_result.objects.get(which_query=x)  #<-- Here

这里,all_reports是一个仅具有xray_result对象的变量。迭代完成后,all_reports将只包含q中的最后一个对象。

相反,你可以这样尝试:

def xray_result_view(request):
all_reports=xray_result.objects.get(which_query__which_user=request.user)
return render(request,'XRay/result.html',{'reports':all_reports})

并更新模板:

{% for y in reports %}
File Name:<br>
Date and Time of Upload:<br>
System Generated Result:{{ y.sys_gen_result }}<br>
Doctor's Comment on Result:{{ y.doctor_comment }}<br>
{% endfor %}

最后,考虑在编写类名时使用PascalCase(根据pep8标准(。

As@ruddra指出循环存在问题。为此,我尝试了下面的变通方法,它很有魅力。

def xray_result_view(request):
q=query_holding_together.objects.filter(which_user=request.user)
all_reports=xray_result.objects.none()
for x in q:  
all_reports = all_reports | xray_result.objects.filter(which_query=x)
for x in all_reports:
print(x.sys_gen_result) 
return render(request,'XRay/result.html',{'reports':all_reports})

相关内容

最新更新