Saya mencipta aplikasi Django mudah yang mencipta halaman HTML yang berasingan untuk setiap negeri AS. Halaman setiap negeri memanjangkan base.html, tetapi dengan kandungan yang berbeza.
URL diisytiharkan dalam fail URLs.py dan pemaparan halaman dipetakan dalam views.py.
Saya ingin tahu bagaimana saya boleh meningkatkan bilangan halaman secara berskala, mungkin kepada ratusan atau bahkan ribuan, tanpa mengisytiharkan secara jelas nama setiap halaman dalam fail views.py dan urls.py.
Bagaimana untuk melaksanakan ini dengan betul?
Fail 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') ]
Untuk menambahkan ratusan atau ribuan halaman HTML dengan nama berbeza dalam Django dengan cekap tanpa mengisytiharkan setiap halaman secara jelas dalam fail views.py dan urls.py, anda boleh menggunakan penghalaan URL dinamik dan paparan generik . Inilah cara yang betul untuk melakukannya:
Ubah suai fail urls.py:
Ubah suai fail views.py:
Dalam persediaan ini kami menggunakan slug corak URL dinamik:state_slug/ dalam urls.py yang akan menangkap nama mana-mana keadaan dan menyerahkannya kepada StateDetailView. StateDetailView ialah paparan berasaskan kelas generik yang menghasilkan templat dinamik berdasarkan state_slug yang ditangkap daripada URL.
Dengan pelaksanaan ini, anda boleh menambah halaman HTML baharu dengan mudah untuk setiap negeri tanpa mengubah suai fail views.py atau urls.py. Hanya pastikan untuk mencipta fail HTML yang sepadan untuk setiap negeri, ikut konvensyen penamaan, dan Django akan menguruskan yang lain. Contohnya, jika anda menambah keadaan baharu bernama "delaware", cuma buat fail HTML baharu bernama "delaware.html" dalam folder templat "states_info_app", yang akan diakses melalui URL "yourdomain.com/delaware" /" akses. Pendekatan ini membolehkan anda menskalakan aplikasi anda untuk mengendalikan sejumlah besar halaman negeri tanpa perlu melaraskan paparan dan konfigurasi URL secara manual.