В Java мы используем метод set и get для доступа к полю. В вашем примере у нас есть класс Dog, расширяющий класс Animal.
Но если вы объявите его как Animal, если вы вызываете непосредственно поле Amimal dog1 = new Dog();
, вы создаете экземпляр Dog, но объявляетесь как Animal, поэтому, когда вы вызываете dog1.name
, он дает вам значение Animal.
Я читал через Wagtail Docs и нашел эту страницу ( http://docs.wagtail.io/en/v2.1.1/advanced_topics/third_party_tutorials.html ), и на этой странице был статья о динамических шаблонах. Это страница, которая имеет его: https://www.coactivate.org/projects/ejucovy/blog/2014/05/10/wagtail-notes-dynamic-templates-per-page/
Идея состоит в том, чтобы установить CharField
и позволить пользователю выбрать свой шаблон. В следующем примере они используют раскрывающийся список, который может быть даже лучше для вас.
class CustomPage(Page):
template_string = models.CharField(max_length=255, choices=(
(”myapp/default.html”, “Default Template”),
(”myapp/three_column.html”, “Three Column Template”,
(”myapp/minimal.html”, “Minimal Template”)))
@property
def template(self):
return self.template_string
^ код с сайта coactivate.org, это не мое дело.
В свойстве шаблона вы можете проверить if not self.template_string:
и установить свой по умолчанию путь туда.
Редактировать # 1: Добавить наследование страницы.
Вы можете добавить родительскую страницу (базовый класс) и изменить ее, а затем расширить любой другой класс с помощью нового базового класса. Вот пример:
class BasePage(Page):
"""This is your base Page class. It inherits from Page, and children can extend from this."""
template_string = models.CharField(max_length=255, choices=(
(”myapp/default.html”, “Default Template”),
(”myapp/three_column.html”, “Three Column Template”,
(”myapp/minimal.html”, “Minimal Template”)))
@property
def template(self):
return self.template_string
class CustomPage(BasePage):
"""Your new custom Page."""
@property
def template(self):
"""Overwrite this property."""
return self.template_string
Кроме того, вы можете установить BasePage как абстрактный класс, чтобы ваши миграции не создавали таблицу базы данных для BasePage (если она используется только для наследования)