更改 Wagtail 中的模板位置

Changing Template Location in Wagtail

我试图指示 wagtail 在项目树顶部的集中位置使用模板。例如:

Project
|_ HomePage
|_ Search
|_ Mypage
|_ templates

我的项目重复使用模板,我想 UX/UI 开发人员可以访问单个文件夹,而不是多个页面中的多个子文件夹。

我试过 Mypage/models.py

class AdvisorSummaryPages(Page):
    
    intro = models.CharField(max_length=250, blank=True, null=True)
    
    content_panels = Page.content_panels + [
     FieldPanel('intro'),
     InlinePanel('carousell', heading="Carousell Images")   
    ]
    
    template = "advisors.html"

Project/Project/settings/base.py

中使用以下模板设置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],

运气不好。我似乎无法在 SO 上或通过文档或 Google 找到任何可能有效的解决方案。这里有一个使用单独 model admins 的解决方案,但这对我不起作用。我如何将模板的位置指定为不同于 MyPage 应用程序中的模板子目录?

谢谢

以下是我组织模板和静态资源的方式。我有一个位于主项目文件夹中的 themes 文件夹,在 themes 文件夹中有命名的主题子文件夹。然后我在 settings/base.py 中有以下内容:

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = os.path.dirname(PROJECT_DIR)

THEMES_URL = '/themes/'
THEME_PATH = os.path.join(BASE_DIR, THEMES_URL.replace('/', ''), 'name_of_theme')

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            THEME_PATH,
            ...other directories...,
        ],
... other TEMPLATES-RELATED CODE
     }
]

STATICFILES_DIRS = [
    os.path.join(THEME_PATH, 'static'),
]


STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

THEME_PATH 定义中的 name_of_theme 文件夹包含主题的所有模板和静态文件。为了正确收集静态文件,每个主题文件夹中的 css、js 等文件的文件夹结构需要是: /themes/name_of_theme/static/name_of_theme/js (or css, etc.)/filename.js (or filename.css, etc.)

/name_of_theme/static/name_of_theme/ 命名空间对于 collectstatic 能够正确收集文件是必需的(有关详细信息,请参阅 Staticfile namespacing here)。当在模板中包含对静态文件的引用时,您可以执行以下操作:

{% static 'name_of_theme/js/filename.js' %}

STATICFILES_DIRS定义只为一个主题设置。如果您使用多个主题,则需要对其进行更改或添加。

前段时间我也看到了这个 Wagtail 包:Wagtail Themes。它看起来很有趣,但我不确定它是否提供了处理在命名主题文件夹中组织的静态文件的功能,如上所述。