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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Wagtail CMS 中添加对 ImageChooserBlock 的矢量图像支持?
允许CREATE和PUBLISH但在Wagtail中禁用EDIT和DELETE