Wagtail:向 PageModel 添加方法以获取检查 url

Posted

技术标签:

【中文标题】Wagtail:向 PageModel 添加方法以获取检查 url【英文标题】:Wagtail: Add method to PageModel to get an inspect url 【发布时间】:2020-10-21 18:06:53 【问题描述】:

我正在尝试将动态而不是硬编码的 get_inspect_url 方法添加到 PageModel

class MyModel(Page):
    # ...
    # this is what I have now, which breaks in prod due to a different admin url
    def get_inspect_url(self):
        inspect_url = f"/admin/myapp/mymodel/inspect/self.id/"   
        return inspect_url

我知道您可以在wagtail_hooks.py 到get admin urls for an object 中使用ModelAdmin.url_helper_class,但我想不出在模型级别上与类方法一样的方法。有什么办法吗?

【问题讨论】:

【参考方案1】:

感谢@Andrey Maslov 的提示,我找到了一种方法:

from django.urls import reverse

    def get_inspect_url(self):
        return reverse(
            f"self._meta.app_label_self._meta.model_name_modeladmin_inspect",
            args=[self.id],
        )

Wagtail admin url 的基本形式是:

[app_label]_[model_name]_modeladmin_[action]

只需将 [action] 更改为以下之一即可生成其他实例级别的管理 url:

edit delete

【讨论】:

【参考方案2】:

如果你有这样的 urls.py 行

path(MyModel/view/<id:int>/', YourViewName, name='mymodel-info'),

然后你可以添加到你的models.py这行

from django.urls import reverse
...

class MyModel(Page):

    def get_inspect_url(self):
        inspect_url = reverse('mymodel-info', kwargs='id': self.id)
        return inspect_url

【讨论】:

我没有额外的 view 与我的模型相关联,因为 Wagtail 会处理这个问题。所以urls.py 中没有明显的 url 路径。但我只是想出了另一种方法:使用settings.WAGTAIL_ADMIN_URL 从我的设置中导入我的管理员基本网址并将其放入。 那么这个答案可能对你有用https://***.com/a/2930241/7186864/对reverse做同样的事情

以上是关于Wagtail:向 PageModel 添加方法以获取检查 url的主要内容,如果未能解决你的问题,请参考以下文章

如何将 PageModel 添加到 Razor 组件?

Wagtail ModelAdmin 只读

如何在 Wagtail CMS 中添加对 ImageChooserBlock 的矢量图像支持?

允许CREATE和PUBLISH但在Wagtail中禁用EDIT和DELETE

在 Django Wagtail BaseSettings 中添加 MultiFieldPanel

如何将计算变量添加到 wagtail StructBlock 模板上下文?