Tambah berbilang halaman HTML dengan cekap dalam Django
P粉356128676
P粉356128676 2023-07-20 18:47:03
0
1
580

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


P粉356128676
P粉356128676

membalas semua(1)
P粉596161915

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:

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

Ubah suai fail views.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']

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan