Дали тестовое задание на джуна, Разработать конструктор из блоков лендинга, которым можно управлять из Django админ панели. В сроки уже не укладываюсь да и уровень не мой нужно учиться дальше, Но очень интересно как такое реализовать куда смотреть в какую сторону копать? Как вообще в Django через админку манипулировать какими-либо элементами на Фронте?
Делаешь несколько моделей.
class LandingPage(models.Model):
page_title = models.Charfield(verbose_name="Заголовок", max_length=100)
# ... остальные поля
class Meta:
verbose_name = "Страница"
verbose_name_plural = "Страницы"
def __str__(self):
return self.page_title
class LandingBlock(models.Model):
BLOCK_TYPE_SIMPLE_TEXT = 'text'
BLOCK_TYPE_NEWS = 'news'
BLOCK_TYPE_COMMENT = 'comment'
BLOCK_TYPE_GALLERY = 'gallery'
BLOCK_TYPE_FEED_BACK = 'feedback'
BLOCK_TYPES = (
(BLOCK_TYPE_SIMPLE_TEXT, "Текстовый блок"),
(BLOCK_TYPE_NEWS, "Новостной блок"),
(BLOCK_TYPE_COMMENT, "Комментарий"),
(BLOCK_TYPE_GALLERY, "Фото галерея"),
(BLOCK_TYPE_FEED_BACK, "Отзывы"),
)
page = models.ForeignKey(LandingPage, verbose_name="Страница", on_delete=models.CASCADE)
block_type = models.Charfield(verbose_name="Тип блока", choices=BLOCK_TYPES, default=BLOCK_TYPE_TEXT, max_length=100)
npp = models.PositiveIntegerField(verbose_name = "№", default=0)
class Meta:
verbose_name = "Страница"
verbose_name_plural = "Страницы"
ordering = ('npp',)
def __str__(self):
return "{}. {} {}".format(self.page, self.npp, self.block_type)
Если захочешь можно тип блока вместо массива вынести в отдельную модель
затем в файле admin.py регистрируешь модели, добавив inline для блоков.
from django.contrib import admin
from .models import LandingBlock, LandingPage
class BlockInlineAdmin(admin.TabularInline):
model = LandingBlock
class PageAdmin(admin.ModelAdmin):
inlines = [BlockInlineAdmin]
admin.site.register(LandingPage, PageAdmin)
Так же для того, что бы можно было легко перетаскивать блоки внутри страницы для сортировки, я бы поставил django-admin-sortable2 тогда admin.py будет выглядеть так(не забудь только добавить в settings.py это приложение, подробней об установке - https://django-admin-sortable2.readthedocs.io/en/latest/installation.html)
from django.contrib import admin
from adminsortable2.admin import SortableInlineAdminMixin
from .models import LandingBlock, LandingPage
class BlockInlineAdmin(SortableInlineAdminMixin, admin.TabularInline):
model = LandingBlock
class PageAdmin(admin.ModelAdmin):
inlines = [BlockInlineAdmin]
admin.site.register(LandingPage, PageAdmin)
Ну и затем уже во view когда будешь готовить html для каждой страницы тебе нужно будет последовательный вывод блоков, которые привязаны к этой странице
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Нужно распарсить html-документ и найти все начальные теги <div>, которые содержат определенное слово, но при этом исключить строки содержащие...
В классических ролевых играх есть 3 стандартных класса: Воин (Warrior), Маг (Mage), Вор (Rogue)Для каждого из классов важен определённый атрибут: для...
Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткойХотя похожие вопросы могут быть уместны на этом сайте, решение...
У меня есть шаблонная функция, которая принимает на вход параметры Args