Les paramètres utilisés par l'ensemble de l'application Web sont généralement définis dans settings.py.
Cependant, si vous modifiez fréquemment les paramètres ou si vous souhaitez que le client puisse les modifier facilement, il est utile de pouvoir les modifier sur le site d'administration de l'administrateur.
Ajoutez ce qui suit à settings.py
settings.py
INSTALLED_APPS = [
~~~~~
'django.contrib.sites', #ajouter à
]
SITE_ID = 1 #ajouter à
Ajoutez ce qui suit à models.py.
models.py
from django.contrib.sites.models import Site
class SiteDetail(models.Model):
site = models.OneToOneField(Site, verbose_name='Site', on_delete=models.PROTECT)
#Voici un exemple d'ajout des éléments définis
DEFAULT_FROM_EMAIL = models.CharField('DEFAULT_FROM_EMAIL', max_length=255, blank=True)
Avec l'introduction du framework de sites fourni avec Django, un site se voit attribuer une donnée de site. En créant un modèle comme SiteDetail qui y est lié avec OneToOne, il semble que vous puissiez créer un modèle qui représente les paramètres de l'ensemble du site Web.
Ajoutez ce qui suit
apps.py
from django.apps import AppConfig
from django.db.models.signals import post_migrate
class AppConfig(AppConfig):
name = 'app'
def ready(self):
from .models import create_default_site_detail
post_migrate.connect(create_default_site_detail, sender=self)
models.py
def create_default_site_detail(sender, **kwargs):
site = Site.objects.get(pk=settings.SITE_ID)
SiteDetail.objects.get_or_create(site=site)
Ajoutez ce qui suit
settings.py
MIDDLEWARE = [
~~~~~~
'django.contrib.sites.middleware.CurrentSiteMiddleware', #ajouter à
]
Cela vous permettra d'accéder aux paramètres avec «{{request.site}}».
Par exemple, {{request.site.sitedetail.DEFAULT_FROM_EMAIL}}
peut être utilisé pour obtenir l'ensemble de courrier ci-dessus.
Ajoutez ce qui suit
admin.py
from django.contrib import admin
from django.contrib.sites.models import Site
from .models import SiteDetail
class SiteDetailInline(admin.StackedInline):
model = SiteDetail
class SiteAdmin(admin.ModelAdmin):
inlines = [SiteDetailInline]
admin.site.unregister(Site)
admin.site.register(Site, SiteAdmin)
Cela permet de modifier le site et les détails du site en même temps.
Le contenu est presque le même que celui du site suivant, mais certaines parties ne fonctionnaient pas, alors je l'ai écrit en Qiita. https://narito.ninja/blog/detail/104/
Recommended Posts