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) : https://www.youtube.com/watch?v=SjRlmyEVXq4&t=4147s
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:
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:
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:
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éthodeCode:
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]
:Citation:
find
j'ai tenté la lecture de cet article surCode:
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.Citation:
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.
:calim2: