Получение кнопки для выполнения функции в 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>
Вернуться на верх