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:

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)]) })
... 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
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'
Je n'ai actuellement pas le niveau pour résoudre ce dysfonctionnement.

J'ai tenté de déclarer les 2 méthodes de la classe sans le paramètres 'cls' :
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]
... mais à ce moment j'obtiens un erreur de type "keyError" (ci-dessous), uniquement sur l'appel de la méthode
find
:

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
j'ai tenté la lecture de cet article sur , mais.. je ne suis pas prêt... besoin d'explications intercatives.

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.