鹡鸰。如何覆盖PageModel的createedit模板?

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

我想覆盖 create.htmledit.html 用于从Wagtails'PageModel'衍生的模型。

如果我理解 文件 正确的,它应该和指定属性一样简单。

class MyAdmin(ModelAdmin):
    model = MyPage
    create_template_name = "myapp/create.html" 
    edit_template_name = "myapp/edit.html"

我的模板位于 projectroot/templates/myapp. 如果我的模型是一个Django模型,它可以正常工作,但对于一个 PageModel 基于模型的创建视图仍然使用 wagtailadmin/pages/create.html. 我也试过文档中提到的其他位置模式wo成功。

是否有可能改变编辑和创建模板,为一个 PageModel? 还是和视图一样的限制,即只适用于 index.htmlinspect.html 可以被覆盖吗?

python wagtail
1个回答
1
投票

ModelAdmin 并不提供创建、编辑或删除页面模型的功能,因为按 说明书.

注意:modeladmin只为非页面类型模型(即不扩展wagtailcore.model.Page的模型)提供 "创建"、"编辑 "和 "删除 "功能。如果您的模型是'页面类型'模型,自定义任何以下将不会有任何效果。

这可能有点混乱,因为 ModelAdmin 系统似乎也适用于页面模型,但还有一些其他的方法来修改页面的编辑方式。这些方法不会被扩展到 ModelAdmin 区域。

选项1 - 自定义生成的表单,为你的 MyPage 模型

例子

from django import forms
from django.db import models

from wagtail.admin.forms import WagtailAdminPageForm
from wagtail.core.models import Page


class EventPageForm(WagtailAdminPageForm):
      # ...


class MyPage(Page):
    # ...
    base_form_class = MyPageForm

选项2--通过钩子定制视图

要为普通的(例如在Wagtail用户栏或资源管理器上点击编辑页面)页面编辑界面定制创建和编辑视图,您需要使用以下功能 鹡鸰钩. 在这里,您可以访问请求,因此您很可能能够确定您是否在。ModelAdmin 区域。

创建一个名为 wagtail_hooks.py 并提供一个钩子来返回一个自定义的响应(这将需要由你的自定义视图来渲染)。

有单独的钩子用于 before_create_pagebefore_edit_page

例子来自 before_create_page 文件 下面是:

from wagtail.core import hooks

from .models import AwesomePage
from .admin_views import edit_awesome_page

@hooks.register('before_create_page')
def before_create_page(request, parent_page, page_class):
    # Use a custom create view for the AwesomePage model
    if page_class == AwesomePage:
        return create_awesome_page(request, parent_page)
```python
© www.soinside.com 2019 - 2024. All rights reserved.