【问题标题】:Creating new Wagtail Hooks创建新的鹡鸰钩
【发布时间】:2021-08-05 15:52:22
【问题描述】:

list 的可用 Wagtail Hooks。

如何创建自己的 Hook?

给你一点背景信息:我想创建一个钩子,它在图像/媒体或文档被删除之前或之后挂接。在钩子中,我想验证每一页,所以不会有任何空字段/块。出于某种原因,可以删除图像并且页面仍然会被提供,所以我认为应该有一个函数/钩子来在图像被删除时再次验证每个页面。

编辑:Wagtail Roadmap 上有一个关于“对象使用报告 - 2021 年第三季度”的项目。所以现在我只需要考虑一个解决方法来修复错误,如果页面包含已删除的图像并被提供。

【问题讨论】:

    标签: django hook wagtail


    【解决方案1】:

    选项 1 - 使用信号而不是 Hooks

    一个选项可以是利用 Dango Signals 系统,它类似于钩子,但更像是消息,而不是注入内容/数据的方式。

    这并不能很好地向用户展示为什么某事被阻止,而只会引发错误(如果需要,您可以使用不同的错误类型)。

    这个答案大致基于similar question for generic blocking of deleting

    signals.py

    from django.db.models import ProtectedError
    from django.db.models.signals import pre_delete
    from django.dispatch import receiver
    
    from wagtail.images import get_image_model
    
    image_model = get_image_model()
    
    
    @receiver(pre_delete, sender=image_model, dispatch_uid='post_pre_delete_signal')
    def protect_posts(sender, instance, using, **kwargs):
        # Note: This will block ANY deleting of image models
        # Checking logic can go here
        raise ProtectedError('Only unpublished posts can be deleted.', instance)
    

    apps.py

    from django.apps import AppConfig
    
    
    class MyAppConfig(AppConfig):
        name = 'my_app.base'  # must match the configured app name
    
        def ready(self):
            # signals are imported, so that they are defined and can be used
            import my_app.base.signals ## the import path of the signals file
    

    选项 2 - 覆盖图像确认删除模板

    Wagtail admin templates can all be overridden,因此您可以利用该系统替换内容(或简单地附加到内容)以提供警告甚至阻止显示删除按钮。

    templates/wagtailimages/images/confirm_delete.html

    {% extends "wagtailimages/images/confirm_delete.html" %}
    
    
    {% block content %}
        {{ block.super }}
        <strong>Warning: Image is also linked to A, B, C</strong>
    {% endblock %}
    

    【讨论】:

    • 我试了一下信号。就像你说的“这并没有提供一种很好的方式来向用户展示为什么某些东西被阻止”。所以我对我的问题做了更多研究,发现路线图将在今年晚些时候处理这​​个问题(见编辑)。但感谢您提供信号提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多