Создание нескольких шаблонов сайта с помощью django cms или любого другого инструмента
Можно ли использовать Django для создания сайта для создания пользовательских сайтов в зависимости от потребностей пользователей? Будет более одного шаблона, и у каждого пользователя будет собственный url для его сайтов.
Я не знаю, можно ли этого достичь с помощью Django CMS.
Конечно, это возможно, но это требует тонны работы, потому что вам нужно написать кучу шаблонов, или/и логику, которая обрабатывает шаблоны.
Вы можете написать TemplateMixin
, который в зависимости от переданного домена или kwarg в url меняет шаблон в View
. Так, например, это может выглядеть следующим образом:
class TemplateMixin:
template_name = None
request = None
model = None
def get_template_names(self):
"""
Return a list of template names to be used for the request.
Must return a list. May not be called if render_to_response() is overridden.
"""
db_settings = Settings.objects.get_or_create()[0]
if self.template_name is None:
raise ImproperlyConfigured(
'TemplateResponseMixin requires either a definition of '
'\"template_name\" or an implementation of \"get_template_names()\"')
template = db_settings.website_template
ready_template = '/'.join([template, self.template_name])
return [ready_template]
Существуют также решения для работы с несколькими доменами, так что вы можете определить текущий домен через self.request
в методе get_template_names
. Шаблоны обрабатываются префиксом. kwargs также должны быть в self.kwargs
, так что вы можете определить, какой сайт вам нужно представить через пользовательское пространство имен url.
Вы также можете создать модель WebsiteSettings
, которая работает с различными шаблонами, управляется с помощью простой пользовательской панели, и принадлежит пользователю или группе пользователей. Поля, которые она должна иметь, это 'template' с атрибутом choices
, отношение к User
(или CustomUser
модели), и куча настроек, которые вы хотите дать пользователю (или вы можете иметь различные модели для этого).
Решение, которое я привожу здесь, простое, чтобы показать идею - но его может быть недостаточно, чтобы достичь того, что вы действительно хотите, вы должны написать всю логику миксинов, представлений и т.д. самостоятельно.