Я хочу, чтобы пользователь Admin мог изменить шрифт, цвет и тему сайта из панели администратора Django?

как лучше всего с этим справиться? Заранее благодарю Вас за обращение и попытку помочь.

Это можно легко сделать с помощью context_processor, немного логики и SingleInstanceMixin класса:

class SingleInstanceMixin(object):
    """Makes sure that no more than one instance of a given model is created."""

    def clean(self):  # noqa: D102
        model = self.__class__
        if model.objects.exists() and self.id != model.objects.get().id:
            raise ValidationError(
                _('Only one object of {0} can be created').format(model.__name__),
            )
        super().clean()

Приведенный выше миксин вы можете вставить в файл views.py или mixins.py. Затем, вы создаете Settings модель в models.py файле:

class Settings(SingleInstanceMixin, models.Model):
    font_name = models.CharField(_('Font name'), max_length=255)
    color = models.CharField(_('Color'), max_length=8)
    theme_name = models.CharField(_('Theme name'), max_length=64)

    def __str__(self):
        return _('Settings instance')

Вы можете создать также функцию, которая создает объект Settings, когда это необходимо, и заполняет его значениями по умолчанию:

def get_settings():
    return Settings.objects.get_or_create()[0]

(Тогда вы должны определить значения по умолчанию в модели Settings).

В конце концов, вы передаете экземпляр Settings в context_processors.py

def website(request):
    return {
        'settings': get_settings(),
    }

Остальную логику вы должны написать сами, в представлениях, шаблонах и т.д. Но начальная идея, как это сделать, показана в коде, который я разместил здесь.

Вернуться на верх