我在我的Django应用程序中进行了一个'简单'搜索,该搜索从数据库中生成所有匹配的列表,匹配搜索项。我希望用户能够点击一个按钮,该按钮将生成包含简单搜索中列出的所有匹配信息的pdf报告。因此,我想知道是否可以“存储”由搜索生成的查询集并将其传递给链接到“生成PDF报告”按钮的函数。根据用于简单搜索的搜索词生成完整的pdf报告
目前search.html模板:(所示的两个相关的观点)
{% extends 'base.html' %}
{% block body %}
{% if enzyme_list %}
<h1>Search Results (matching enzyme terms):</h1>
<ul>
{% for enzyme in enzyme_list %}
<li><a href="{% url 'gts:detail' enzyme.id %}">{{ enzyme.barcode }}, {{ enzyme.enzyme_name }}</a></li>
{% endfor %}
</ul>
<div>
<a href="{% url 'gts:pdf_report' %}" class="btn btn-primary">Generate PDF report (WORK IN PROGRESS)</a>
</div>
{% else %}
<h1>No enzyme(s) found matching the specified search term.</h1>
{% endif %}
{% endblock %}
的views.py
# The view that is used to generate the initial simplified list (template shown above)
class EnzymeList(generic.ListView):
context_object_name = 'enzyme_list'
template_name = 'gts/search.html'
def get_queryset(self):
query = self.request.GET.get("q")
#queryset_list = Enzymes.objects.filter(barcode='Tt_86')
queryset_list = Enzymes.objects.filter(Q(barcode__icontains=query) |
Q(enzyme_name__icontains=query) | Q(ec_number__icontains=query) | Q(enzyme_activity__icontains=query) |
Q(organism__icontains=query) | Q(genbank_number__icontains=query) | Q(uniprot_accession__icontains=query) |
Q(description_of_activity__icontains=query) | Q(experiment_details__icontains=query)
)
return queryset_list
# The view that is linked to the PDF generation (just the 'framework' for now).
def ReportView(request):
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'
# Create the PDF object, using the response object as its "file."
p = canvas.Canvas(response)
# Draw things on the PDF. Here's where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
p.drawString(100, 100, "Hello world.")
# Close the PDF object cleanly, and we're done.
p.showPage()
p.save()
return response
的URL匹配功能
app_name = 'gts'
urlpatterns = [
url(r'^get_result/$', views.EnzymeList.as_view(), name='enzyme_list'),
url(r'^pdf_report/$', views.ReportView, name='pdf_report'),
]
的urls.py
我希望我能够做一些像<a href="{% url 'gts:pdf_report' enzyme_list %}" class="btn btn-primary">
结合新功能头部def ReportView(request, data):
在模板中,但这表示错过了反向匹配。
- 可能的解决方法 -
我找到了一种方法来得到它的工作,但我宁愿相信,这是不正确的“Django的,我刚才说了查询到的回报。因此,我可以将它发回给pdf一代。在 '蹩脚' 溶液介绍如下:
views.py
class EnzymeList(generic.ListView):
context_object_name = 'enzyme_list'
template_name = 'gts/search.html'
def get_queryset(self):
query = self.request.GET.get("q")
#queryset_list = Enzymes.objects.filter(barcode='Tt_86')
queryset_list = Enzymes.objects.filter(Q(barcode__icontains=query) |
Q(enzyme_name__icontains=query) | Q(ec_number__icontains=query) | Q(enzyme_activity__icontains=query) |
Q(organism__icontains=query) | Q(genbank_number__icontains=query) | Q(uniprot_accession__icontains=query) |
Q(description_of_activity__icontains=query) | Q(experiment_details__icontains=query)
)
return (query, queryset_list)
search.html
{% extends 'base.html' %}
{% block body %}
{% if enzyme_list %}
<h1>Search Results (matching enzyme term: "{{ enzyme_list.0 }}"):</h1>
<ul>
{% for enzyme in enzyme_list.1 %}
<li><a href="{% url 'gts:detail' enzyme.id %}">{{ enzyme.barcode }}, {{ enzyme.enzyme_name }}</a></li>
{% endfor %}
</ul>
<div>
<a href="{% url 'gts:pdf_report' %}?q={{enzyme_list.0}}" class="btn btn-primary">Generate PDF report (WORK IN PROGRESS)</a>
</div>
{% else %}
<h1>No enzyme(s) found matching the specified search term: "{{ enzyme_list.0 }}".</h1>
{% endif %}
{% endblock %
}
- TL:DR -
然后问题具体是如何搜索词应该是韩假设我的'修复'不是Django式的,那么可以使用ReportView
函数。