Bonjour/Bonsoir,
Dans une de mes apps Django, il y a une page sur laquelle l'utilisateur accède à un bouton pour obtenir un fichier au format csv, fichier qui est écrit par une fonction et dont le contenu varie en fonction du mois en cours. J'aimerai placer une sorte "d'historique" sur cette page, permettant à l'utilisateur d'obtenir le fichier csv correspondant aux mois passés par l'intermédiaire d'une boucle créant des boutons. Seulement, et c'est logique, les boutons renvoient sur la fonction qui écrit ce fichier csv sans valeur affectant le mois qui remplit mon fichier csv.
Ainsi, j'aimerai savoir s'il est possible de renvoyer une valeur à ma fonction à l'aide de ce bouton par l'intermédiaire de "value" par exemple. Voici mon code à l'instant présent :
views.py
Dans mon template :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 import csv @login_required def export(request): date = datetime.datetime.now() mois = date.month mois = str(mois) annee = date.year annee = str(annee) nomfichier = mois + annee listemoisannee = [] jour = date.today() year = jour.year month = jour.month stop = datetime.date(year, month+1, 1) date_depart = datetime.date(2019, 1, 1) # Date de départ de l'historique year = date_depart.year month = date_depart.month while date_depart != stop: listemoisannee.append(date_depart.strftime("%B") + ' ' + str(date_depart.year)) if month == 12: month = 1 year = year + 1 else: month = month + 1 date_depart = datetime.date(year, month, 1) context = { 'nomfichier': nomfichier, 'liste': liste, } return render(request, 'export', context) @login_required def download_csv(): date = datetime.datetime.now() mois = date.month mois = str(mois) print(mois) annee = date.year annee = str(annee) print(annee) nomfichier = mois + annee print(nomfichier) # Create the HttpResponse object with the appropriate CSV header. response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename=' + nomfichier + '.csv' writer = csv.writer(response) ### return response
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 {% for name in listemoisannee %} {% buttons %}<input type="button" value="{{name}}" onclick="window.open('download_csv')">{% endbuttons %} {% endfor %}
Dans urls.py :
J'avais l'idée de faire fonctionner la chose grâce à un "url dynamique" en plaçant une variable date dedans par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 from django.urls import path from conge import views urlpatterns = [ ##### path('user/export', views.export, name='export'), path('user/download_csv', views.download_csv), ]
L'idée de faire un form avec une sorte de datepicker au format mois/année est peut-être une bonne piste, elle aussi mais je ne sais pas quelle solution est la plus judicieuse.
Si quelqu'un se sent de m'aiguiller vers une autre solution, je suis ouvert aux propositions
Partager