python - Wagtail 'View live' 按钮在使用 id 作为 slug 时创建页面后提供错误的 url

标签 python django url wagtail wagtail-admin

我有一个使用页面 ID 作为 slug 的案例,在创建新页面后,Wagtail 为我们提供了一个“查看实时”按钮,但是当我们单击该按钮时,它提供了错误的 URL

enter image description here

enter image description here

正确的 URL 应该是“.../property-list/

我搜索了堆栈溢出,找到了这个线程,但答案仍然是个谜: Wrong 'View live' url in Wagtail admin message after page creation when using id as slug

我按照Wagtail官方文档,使用Wagtail Hooks来操作数据。然而,还没有成功。这是我的代码:

@hooks.register('after_create_page')
def set_number_and_slug_after_property_page_created(request, page):
    page.number = page.slug = str(page.id)
    page.save()
    new_revision = page.save_revision()
    if page.live:
        new_revision.publish()

请帮帮我,谢谢。

最佳答案

after_create_page Hook 对此不起作用,因为它是 one of the last things to run在 Wagtail 管理员的页面创建 View 期间,此时确认消息(包括旧 URL)已经构建完毕。这可以通过使用 post_save signal 来解决相反,由 Django 提供 - 作为一种更底层的机制,它与保存数据库记录的行为更紧密地联系在一起,而不会妨碍 Wagtail 的管理逻辑。

(它也更加面向 future :Wagtail 的 after_create_page Hook 被设计为在用户浏览 Wagtail 管理的页面创建区域时被调用,以便在适当的情况下可以使用它通过管理员自定义用户的路径。如果有任何其他可以创建页面的途径 - 例如数据导入或使用多语言网站的翻译工具 -那么 after_create_page 将被绕过,但 post_save 信号仍然会被触发。)

假设您的项目有一个 properties 应用程序,您可以在其中定义 PropertyPage 模型,则可以重写您的代码以使用 post_save,如下所示 - 在 properties/中信号.py:

from django.db.models.signals import post_save
from django.dispatch import receiver

from .models import PropertyPage


@receiver(post_save)
def set_number_and_slug_after_property_page_created(sender, instance, created, **kwargs):
    if issubclass(sender, PropertyPage) and created:
        page = instance
        page.number = page.slug = str(page.id)
        page.save()
        new_revision = page.save_revision()
        if page.live:
            new_revision.publish()

然后,要在服务器启动时连接此信号,请创建一个包含以下内容的 properties/apps.py(或者如果您有,则只需添加/编辑 ready 方法)已经有一个 AppConfig 类):

from django.apps import AppConfig


class PropertiesConfig(AppConfig):
    name = 'properties'

    def ready(self):
        from . import signals

关于python - Wagtail 'View live' 按钮在使用 id 作为 slug 时创建页面后提供错误的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70515946/

相关文章:

Python - 需要遍历目录以查找 TXT 文件

python - 从时间序列的数据帧中获取失败和成功的数量

django - django中forms.py有什么用

django - Serializer等效于rest框架中django表单的clean

python - 添加数据库模块

.htaccess - 将域重定向到带有语言子文件夹的新域

python - 将连续的重复字符替换为一个 - 逐列操作 - `pandas.DataFrame`

python - Numpy错误: operands could not be broadcast together with shapes 1

regex - 在Ruby中使用正则表达式从路径中删除最后一个目录?

wpf - 从 URL 同步下载图像