J'ai créé une application Django simple qui crée une page HTML distincte pour chaque État américain. La page de chaque état étend base.html, mais avec un contenu différent.
Les URL sont déclarées dans le fichier URLs.py et le rendu de la page est mappé dans vues.py.
J'aimerais savoir comment augmenter le nombre de pages de manière évolutive, éventuellement par centaines, voire par milliers, sans déclarer explicitement le nom de chaque page dans les fichiers views.py et urls.py.
Comment mettre cela en œuvre correctement ?
Fichier HTML
base.html states_info_app/index.html alabama-weather.html alaska-population.html arizona-schools.html arkansas-hospitals.html california-restaurants.html colorado-colleges.html connecticut-gyms.html
Views.py
from django.shortcuts import render from django.views import View def index(request): return render(request, 'states_info_app/index.html') def alabama(request): return render(request, 'alabama-weather.html') def alaska(request): return render(request, 'alaska-population.html') def arizona(request): return render(request, 'arizona-schools.html') def arkansas(request): return render(request, 'arkansas-hospitals.html') def california(request): return render(request, 'california-restaurants.html') def colorado(request): return render(request, 'colorado-colleges.html') def connecticut(request): return render(request, 'connecticut-gyms.html')
URLs.py
from django.contrib import admin from django.urls import path from states_info_app.views import index from states_info_app import views urlpatterns = [ path('admin/', admin.site.urls), path('', index, name='index'), path('states', views.states, name='states'), path('alabama-weather', views.alabama, name='alabama'), path('alaska-population', views.alaska, name='alaska'), path('arizona-schools', views.arizona, name='arizona'), path('arkansas-hospitals', views.arkansas, name='arkansas'), path('california-restaurants', views.california, name='california'), path('colorado-colleges', views.colorado, name='colorado'), path('connecticut-gyms', views.connecticut, name='connecticut') ]
Pour ajouter efficacement des centaines ou des milliers de pages HTML avec des noms différents dans Django sans déclarer explicitement chaque page dans les fichiers vues.py et urls.py, vous pouvez utiliser le routage d'URL dynamique et les vues génériques. Voici la bonne façon de procéder :
Modifiez le fichier urls.py :
Modifier le fichier vues.py :
Dans cette configuration, nous utilisons un modèle d'URL dynamique slug:state_slug/ dans urls.py qui capturera le nom de n'importe quel état et le transmettra à StateDetailView. StateDetailView est une vue générique basée sur une classe qui restitue des modèles dynamiques basés sur le state_slug capturé à partir de l'URL.
Avec cette implémentation, vous pouvez facilement ajouter de nouvelles pages HTML pour chaque état sans modifier les fichiers vues.py ou urls.py. Assurez-vous simplement de créer les fichiers HTML correspondants pour chaque état, suivez la convention de dénomination et Django s'occupera du reste. Par exemple, si vous avez ajouté un nouvel état nommé "delaware", créez simplement un nouveau fichier HTML nommé "delaware.html" dans le dossier modèle "states_info_app", qui sera accessible via l'URL "votredomaine.com/delaware" /" accéder. Cette approche vous permet de faire évoluer votre application pour gérer un grand nombre de pages d'état sans avoir à ajuster manuellement les vues et les configurations d'URL.