首页 > 解决方案 > Wagtail:为 Multisite 中的每个应用程序设置一个专用的静态文件夹

问题描述

我正在使用 Multisite 在单个 Wagtail 构建上管理多个网站和自定义管理员。目前,我的静态文件夹设置如下:

设置.py:

INSTALLED_APPS = [
    'websites.sua_umn_edu',
    'admin_sua_umn_edu',
    ...
]

STATIC_URL = '/static/'

有没有办法STATIC_URL动态设置,所以每个应用程序在自己的文件夹中寻找一个静态目录?

标签: pythondjangowagtail

解决方案


request.site也许是根据您的需要创建路径的模板标签?我为每个站点样式表创建了一个模板标签:

@register.inclusion_tag('website/tags/stylesheet.html', takes_context=True)
def stylesheet(context):
    slug = slugify(context['request'].site)
    return {
        'path': '/css/{}/main.css'.format(slug)
    }

网站/标签/stylesheet.html

{% load static %}

<link rel="stylesheet" href="{% static path %}">

这个模板标签可以在你的 base.html 中使用

{% stylesheet %}

也许样式表对于您的网站来说太有限了,但这个概念可以概括。这是{% site_static '...' %}模板标签的伪代码。它查找当前站点并调用普通的静态模板标签。

from django.templatetags.static import do_static


@register.tag('site_static', takes_context=True)
def site_static(context, parser, token)
    site_slug = slugify(context['request'].site)
    token = '{}/{}'.format(site_slug, token)
    return do_static(parser, token)

推荐阅读