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
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
Dans mon template :
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 :
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),
]
J'avais l'idée de faire fonctionner la chose grâce à un "url dynamique" en plaçant une variable date dedans par exemple.

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