编程页面添加到已知父

问题描述 投票:7回答:3

我想对于一个已知的父母以编程方式创建一个子页面。我怎样才能做到这一点?页面创建将发生在信号接收器:该页面是在另一页的出版物中创建。

wagtail
3个回答
11
投票

添加修订为好。

from wagtail.wagtailcore.models import Page
from models import MyPage

home = Page.objects.get(id=3) # or better Page query
my_page = models.MyPage(title="test", body="<h1>the body</h1>")
home.add_child(instance=my_page)

# later when a cms user updates the page manually 
# there will be no first revision to compare against unless
# you add a page revision also programmatically.

my_page.save_revision().publish() 

你可以看到鹡鸰请问这是怎么在wagtailadmin页面创建视图(线156)。 https://github.com/wagtail/wagtail/blob/stable/1.13.x/wagtail/wagtailadmin/views/pages.py

更新2018年9月18日:我建了一个700页的网站,包括200个生成的页面。我从来没有在任何地方添加一个初始版本,无编辑抱怨。第一手动编辑后会有一个版本。来吧,如果你认为它是需要的可追溯性添加初始版本。


3
投票

以编程方式创建一个页面:

page = SomePageType(title="My new page", body="<p>Hello world</p>")  # adjust fields to match your page type
parent_page.add_child(instance=page)

0
投票

下面是我完整的代码以编程方式创建一个多语言的页面结构。它将与一个LanguageRedirectionPage实例取代“鹡鸰欢迎页面”。

关于多国语言页面的详细信息:Wagtail Docs - Internationalization

页面结构如下:

  • 页 LanguageRedirectionPage(将重定向到/ EN) 页(EN) 页(德) 页(FR)

其中的代码指向LanguageRedirectionPage实例的末尾创建网站实例。这是我们的应用程序的入口点。

# Deletes existing pages and sites
Site.objects.all().delete()
Page.objects.filter(pk=2).delete() # Deletes Wagtail welcome page
root_page = Page.objects.filter(pk=1).get()

# Adds a LanguageRedirectionPage as a child of the Root Page
app_name = '[Your Project Name]'
page_slug = app_name.lower().replace(" ", "")
sub_root_page = LanguageRedirectionPage(
    title=app_name,
    draft_title=app_name,
    slug=page_slug,
    live=True,
    owner=account,
)

root_page.add_child(instance=sub_root_page)
sub_root_page.save_revision().publish()

# Adds some language pages
for code,caption in dict(settings.LANGUAGES).items():
    print(code, caption)
    sub_root_page.add_child(instance=Page(
        title=caption,
        slug=code,
        live=True,
        owner=account,
    ))

# Adds a new Site instance (See Settings -> Sites in your Wagtail admin panel)
Site.objects.create(
    hostname='localhost',
    port='80',
    site_name=app_name,
    root_page=sub_root_page,
    is_default_site=True,
)
© www.soinside.com 2019 - 2024. All rights reserved.