Hello team Python,
Mayday.
Je précise que je suis débutant sous Python (3.7.1) et j'apprend django (2.1.3) en même temps.
je suis l'excellent tutorial (sous pythn 3.6) de "Honoré Hounwanou" de "les profs du net" ici (pour ceux qui connaissent) :
J'en suis rendu à entre 1:18:00 et 1:22:00.
A cette étape, le tuto nous guide pour créer la classe suivante (j'ai remis les noms des variables à ma sauce):
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 class Pays(): # ici 'PAYS' est une "Constante de classe" dans une classe PAYS = [ {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'}, {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'}, {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'}, {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'}, {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'}, ] classmethod def all(cls): return cls.PAYS classmethod def find(cls, id): return cls.PAYS[int(id)-1]
La vue (ou le template) html code sensé exploiter cette classe est définie comme suit:
... et j'obtiens une erreur de type "TYPEeRROR"
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 from django.shortcuts import render from django.http import HttpResponse from django.shortcuts import render from .templates....classes.mocks import Pays # Create your views here. # # Dictionnaire test, à commeter suite à connexion à la BD # pays = [ # {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'}, # {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'}, # {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'}, # {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'}, # {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'}, # ] def home(request): pays = ['1. Gabon', '2. France', '3. Sénégal','4. belgique', '5. Maroc'] return render(request, '.../pages/home.html', {'pays': pays}) def pays_liste(request): pays = Pays.all() return render(request, '.../pages/pays_liste.html', {'listepays': pays}) def pays_details(request, id): payschoisi = Pays.find(id) return render(request, '.../pages/pays_details.html', {'payschoisi':str(payschoisi[int(id)]) })
Je n'ai actuellement pas le niveau pour résoudre ce dysfonctionnement.
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 Environment: Request Method: GET Request URL: http://127.0.0.1:8000/.../pays/ Django Version: 2.1.3 Python Version: 3.7.1 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', '....apps....'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\exception.py" in inner 34. response = get_response(request) File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request) File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "D:\Mes Projets\... projects\...\views.py" in pays_liste 41. pays = Pays.all() Exception Type: TypeError at /..../pays/ Exception Value: all() missing 1 required positional argument: 'cls'
J'ai tenté de déclarer les 2 méthodes de la classe sans le paramètres 'cls' :
... mais à ce moment j'obtiens un erreur de type "keyError" (ci-dessous), uniquement sur l'appel de la méthode
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 class Pays(): # ici 'PAYS' est une "Constante de classe" dans une classe PAYS = [ {'id': '1', 'nom_pays': 'Gabon', 'continent': 'Afrique'}, {'id': '2', 'nom_pays': 'France', 'continent': 'Europe'}, {'id': '3', 'nom_pays': 'Sénégal', 'continent': 'Afrique'}, {'id': '4', 'nom_pays': 'Belgique', 'continent': 'Europe'}, {'id': '5', 'nom_pays': 'Maroc', 'continent': 'Afrique'}, ] classmethod def all(): return Pays.PAYS classmethod def find(id): return Pays.PAYS[int(id)-1]:find
j'ai tenté la lecture de cet article sur
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 Environment: Request Method: GET Request URL: http://127.0.0.1:8000/.../pays/1 Django Version: 2.1.3 Python Version: 3.7.1 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'smartview.apps....Config'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback: File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\exception.py" in inner 34. response = get_response(request) File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response 126. response = self.process_exception_by_middleware(e, request) File "d:\Mes Projets\...\lib\site-packages\django\core\handlers\base.py" in _get_response 124. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "D:\Mes Projets\... projects\.\views.py" in pays_details 55. return render(request, '.../pages/pays_details.html', {'payschoisi':str(payschoisi[int(id)]) }) Exception Type: KeyError at /.../pays/1 Exception Value: 1, mais.. je ne suis pas prêt... besoin d'explications intercatives.object Querydict : https://docs.djangoproject.com/fr/2....uest-response/
Queqlu'un saurait-il m'aider à fixer cette erreur? je peux avancer et bypasser l'implémentation de la classe, vu que si je m'arrête à la déclaration d'une variable globale dans la vue, (views.py); le tout fonctionne, mais je souhaite vraiment fixer ce souci...
Merci pour votre aide.
Partager