Ajoutez efficacement plusieurs pages HTML dans Django
P粉356128676
P粉356128676 2023-07-20 18:47:03
0
1
617

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')
]


P粉356128676
P粉356128676

répondre à tous(1)
P粉596161915

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 :

from django.contrib import admin
from django.urls import path
from states_info_app.views import index, StateDetailView
from states_info_app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index, name='index'),
    path('states', views.states, name='states'),
    path('<slug:state_slug>/', StateDetailView.as_view(), name='state-detail')
]

Modifier le fichier vues.py :

from django.shortcuts import render
from django.views import View
from django.views.generic import DetailView

class StateDetailView(DetailView):
    template_name = 'states_info_app/base.html'
    model = YourStateModel  # Replace this with the actual model you're using for states

    def get_template_names(self):
        state_slug = self.kwargs['state_slug']
        return [f'states_info_app/{state_slug}.html']

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal