Einstellungen, die von der gesamten Webanwendung verwendet werden, werden im Allgemeinen in settings.py vorgenommen.
Wenn Sie die Einstellungen jedoch häufig ändern oder wenn der Client sie problemlos ändern soll, ist es hilfreich, sie auf der Admin-Admin-Site ändern zu können.
Fügen Sie der Datei settings.py Folgendes hinzu
settings.py
INSTALLED_APPS = [
~~~~~
'django.contrib.sites', #hinzufügen
]
SITE_ID = 1 #hinzufügen
Fügen Sie models.py Folgendes hinzu.
models.py
from django.contrib.sites.models import Site
class SiteDetail(models.Model):
site = models.OneToOneField(Site, verbose_name='Site', on_delete=models.PROTECT)
#Das Folgende ist ein Beispiel für das Hinzufügen der festgelegten Elemente
DEFAULT_FROM_EMAIL = models.CharField('DEFAULT_FROM_EMAIL', max_length=255, blank=True)
Mit der Einführung des mit Django gelieferten Site-Frameworks werden einem Site Standortdaten zugewiesen. Wenn Sie ein Modell wie SiteDetail erstellen, das mit OneToOne verknüpft ist, können Sie anscheinend ein Modell erstellen, das die Einstellungen der gesamten Website darstellt.
Fügen Sie Folgendes hinzu
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)
Fügen Sie Folgendes hinzu
settings.py
MIDDLEWARE = [
~~~~~~
'django.contrib.sites.middleware.CurrentSiteMiddleware', #hinzufügen
]
Auf diese Weise können Sie mit {{request.site}}
auf die Einstellungen zugreifen.
Zum Beispiel kann {{request.site.sitedetail.DEFAULT_FROM_EMAIL}}
verwendet werden, um die oben eingestellte Mail abzurufen.
Fügen Sie Folgendes hinzu
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)
Auf diese Weise können Site und Site-Details gleichzeitig bearbeitet werden.
Der Inhalt ist fast der gleiche wie auf der folgenden Seite, aber es gab einige Teile, die nicht funktionierten, also habe ich ihn in Qiita geschrieben. https://narito.ninja/blog/detail/104/
Recommended Posts