Получение кнопки для выполнения функции в django
Мне нужна веб-страница, на которой пользователь нажимает кнопку для создания документа word.
В настоящее время, однако, когда пользователь нажимает на кнопку, страница просто перезагружается и добавляет '?get_doc=get_doc#' к url.
Вместо этого я бы хотел, чтобы пользователю предлагалось скачать созданный документ
urls.py
app_name = "patient"
urlpatterns = [
path('add/', views.PatientAddView.as_view(), name="patient_add"),
path(
route='<patient_id>/',
view=views.TreatmentTemplateView.as_view(),
name='treatment_detail'),
]
views.py
class TreatmentTemplateView(TemplateView):
template_name = "../templates/patient/treatment_detail.html"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context["patient_id"] = self.kwargs["patient_id"]
result = find_treatment(context["patient_id"])
context = result[0]
context["patient"] = result[1]
return context
def get_doc(request):
print('running9')
# if(request.GET.get('get_doc')):
if 'get_doc' in request.GET:
print('running')
document = Document()
docx_title="TEST_DOCUMENT.docx"
# ---- Cover Letter ----
document.add_paragraph()
document.add_paragraph("%s" % date.today().strftime('%B %d, %Y'))
document.add_paragraph('Dear Sir or Madam:')
document.add_paragraph('We are pleased to help you with your widgets.')
document.add_paragraph('Please feel free to contact me')
document.add_paragraph('I look forward to assisting you in this project.')
document.add_paragraph('Best regards,')
document.add_paragraph('Acme Specialist 1]')
document.add_page_break()
# Prepare document for download
# -----------------------------
f = BytesIO()
document.save(f)
length = f.tell()
f.seek(0)
response = HttpResponse(
f.getvalue(),
content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'
)
response['Content-Disposition'] = 'attachment; filename=' + docx_title
response['Content-Length'] = length
return response
html
{% extends "base.html" %}
<!-- {% block title %}Patient: {{ patient.name }}{% endblock %} -->
{% block content %}
<h3>Patient Summary</h3>
<p>
{{pt_letter|linebreaks}}
</p>
<form action="#" method="get">
<input type="submit" class="btn btn-primary" value="get_doc" name="get_doc">
</form>
{% endblock content %}
Вам нужно указать маршрут для отправки get запроса. Простое описание ниже должно сработать
<form action="{% url 'patient_add' %}" method="get">
<input type="submit" class="btn btn-primary" value="get_doc" name="get_doc">
</form>