wagtail 中自定义图像 default_attrs 的文档和/或代码问题?

问题描述 投票:0回答:1

首先,我使用的是 wagtail 5.2 和 django 4.2。

因此,我尝试按照与使用默认属性相关的文档中的说明进行操作。

https://github.com/wagtail/wagtail/blob/77c9a3a7c29748c6ee0c7709d5a7941b1f4545a0/docs/topics/images.md?plain=1#L329-L354

我最初并不是继承自

WagtailImagesAppConfig
,所以我改变了我的代码。之后的文档表示将
wagtail.images
中的
settings.INSTALLED_APPS
替换为
CustomUsersAppConfig
的路径,并显示
wagtail.images
被注释掉。我发现,如果我这样做,那么引用
wagtailimages
的迁移将不起作用,因此
wagtail.images
需要保留在已安装的应用程序中。

但是,为了使其工作,由于继承,您需要在应用程序配置中指定一个标签,否则 django 会抱怨

Application labels aren't unique
。进行此更改后,我可以毫无问题地运行服务器。所以这样的事情是有效的:

class ImagesConfig(WagtailImagesAppConfig):
    name = "xxxxx.images_custom"
    label = "images_custom"
    verbose_name = "Images"
    default_attrs = {
        "loading": "lazy",
    }

但是,后来我遇到了我定义的默认属性没有添加到图片标签的问题。

首先,我了解了如何在 django 代码中创建应用程序配置。该文档说将已安装的应用程序设置为应用程序配置。因为它是这样定义的,所以 django 会继续正确创建它。但我发现,如果你只有应用程序名称(

"[APPDIRECTORYNAME].images_custom"
)并且不包含应用程序配置的路径,那么django将找到2个应用程序配置(
ImagesConfig
WagtailImagesAppConfig
)。然后它会查看它们以找到设置了
default = True
的一个。如果在其中任何一个上都没有找到,那么 django 就会继续从它自己的类创建应用程序配置,这意味着
default_attrs
将不存在,因为它没有使用应用程序配置类。因此,如果您仅在已安装的应用程序中定义目录和应用程序名称,则需要默认值 True。

学习这些并不能帮助解决问题,我的图片标签仍然没有得到我的默认属性。所以,我查看了代码,添加了这一行,以加载默认属性。

https://github.com/wagtail/wagtail/blob/5108b5f82aabd3c2d35da92efd2afc4595e979c6/wagtail/images/models.py#L831

但是,我不确定这应该如何工作,因为默认属性是在自定义图像应用程序配置上定义的,而不是在 wagtail 图像应用程序配置上定义的。如果我在代码中放置一个断点,那么我可以看到,如果此代码正在加载自定义应用程序配置,则默认属性将正确返回。

所以,我相信我遇到的问题是:

  1. 文档可以进行一些小的改进。我弄清楚了需要什么,但一点点改进可能会让其他人更容易。如果您愿意,我可以提出与此相关的文档更改的拉取请求。
  2. 代码也需要更改,因为我没有看到任何会将默认属性从自定义应用程序配置复制到 wagtail 图像应用程序配置的内容。

这是正确的吗?或者,我有什么遗漏的吗?

INSTALLED_APPS = [
    # This project
    "xxxx.documents_custom",
    "xxxx.images_custom",
    "xxxx.users",
    "xxxx.website",
    # CodeRed CMS
    "coderedcms",
    "django_bootstrap5",
    "django_sass",
    "modelcluster",
    "taggit",
    "wagtailcache",
    "wagtailseo",
    # Wagtail
    "wagtail",
    "wagtail.admin",
    "wagtail.contrib.forms",
    "wagtail.contrib.redirects",
    "wagtail.contrib.settings",
    "wagtail.contrib.table_block",
    "wagtail.contrib.typed_table_block",
    "wagtail.documents",
    "wagtail.embeds",
    "wagtail.images",
    "wagtail.search",
    "wagtail.sites",
    "wagtail.snippets",
    "wagtail.users",
    # Django
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.messages",
    "django.contrib.sessions",
    "django.contrib.staticfiles",
    "django.contrib.sitemaps",
    "django.forms",
    "anymail",
]```
python wagtail
1个回答
0
投票

鉴于您的 ImagesConfig 继承自 WagtailImagesAppConfig,我认为您应该在 INSTALLED_APPS 中将

"wagtail.images"
替换为
"xxxx.images_custom"
。这就是我在我的项目中所做的,并且运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.