Я хочу, чтобы пользователь 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(),
}
Остальную логику вы должны написать сами, в представлениях, шаблонах и т.д. Но начальная идея, как это сделать, показана в коде, который я разместил здесь.