在 wagtail 中批量上传和创建包含图像的页面(迁移)

2024-02-15

我正在使用 wagtail 创建一个网站来替换某人现有的 weebly 网站。重新创建数百个页面实例并上传每个页面的每个图像需要花费几个小时。

我已经有了我需要的页面模型,并且我的网站看起来很像 wagtail 文档中的入门教程。我想知道如何编写迁移此内容的脚本。在寻找答案时,我找到了有关以编程方式创建模型的更多信息,而不是将内容本身推送到我的 wagtail 网站。

我已经抓取了旧站点并保存了所需的所有图像,并且我有以下格式的 JSON 数据:

[
    {
        "page_name": "first page",
        "images": [
            {
                "url": "http://www.a.com/final-1.jpg",
                "filename": "final-1.jpg",
                "caption": "A caption"
            },
            {
                "url": "http://www.a.com/final-2.jpeg",
                "filename": "final-2.jpeg",
                "caption": ""
            }
        ],
        "body": "Body text goes here. "
    },
    {
        "page_name": "page 2",
        "images": 

...

]

我怀疑其他人过去也遇到过这个问题。我仍然感谢社区和你们的所有贡献。干杯!


让它工作。

data.json 存储在站点根文件夹中,import_content.py 位于 blog/management/commands 中

然后运行pipenv run py manage.py import_content

from django.core.management.base import BaseCommand, CommandError
from blog.models import InstallationPage, GalleryImage, Gallery, InstallationMedium

from wagtail.images.models import Image
from django.core.files.images import ImageFile
from io import BytesIO

import json, os
from datetime import datetime
from slugify import slugify

class Command(BaseCommand):
    help = 'Importing pages and image content, for initial migration.'


    def handle(self, *args, **options):
        with open('data.json', 'r') as f:
            data = json.load(f)['data']
            for page in reversed(data):
                name=page['name']
                body=page['body']
                images=page['images']

                parent = Gallery.objects.first()

                new_page = InstallationPage(
                    title=name,
                    slug=slugify(name),
                    date=datetime.today(),
                    body=json.dumps([{'type': 'paragraph', 'value':body}]) if len(body) else None,
                    mediums=[InstallationMedium.objects.get(name='Painting')]
                    )
                self.stdout.write(f"Initialized page {name}")
                saved_images = []
                for img_data in images:
                    path = os.path.join(r"C:\path\to\image\files",img_data['filename'])

                    with open(path,"rb") as imagefile:

                        image = Image(file=ImageFile(BytesIO(imagefile.read()), name=img_data['filename']), title=name+'-'+img_data['filename'].rsplit('.',1)[0])
                        image.save()
                        gallery_image = GalleryImage(
                            image=image,
                            caption=img_data['caption']
                            )
                        saved_images.append(gallery_image)
                        self.stdout.write(f"    Saved image {img_data['filename']} to database")


                parent.add_child(instance=new_page)
                new_page.save_revision()

                new_page.gallery_images=saved_images
                new_page.save_revision().publish()

                self.stdout.write(f"        Attached images to {name}.")

                self.stdout.write(f"Published page {name} with {str(len(images))} images.")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 wagtail 中批量上传和创建包含图像的页面(迁移) 的相关文章

  • 从 wagtail 外部上传 Wagtail 图像

    在无法子类化的 Django 模型中Page 我想转换现有的 ImageField 以使用 Wagtail 图像 我将该字段重新定义为 avatar models ForeignKey wagtailimages Image null Tr
  • 图像模型数据迁移

    您好 这主要是 Google 群组中提出的问题的复制粘贴 感谢 Wagtail 文档 我能够了解如何构建自定义图像模型 但是 由于我有一个包含 500 多个内容的网站 我不想因为糟糕的数据迁移而搞乱整个事情 事实上 我不确定这里应该使用哪种
  • Django storages S3 - 存储现有文件

    我有 django 1 11 和最新的 django storages 使用 S3 后端进行设置 我正在尝试使用 AWS 图像链接作为起点 以编程方式实例化图像文件 我无法弄清楚如何通过查看源代码 文档来做到这一点 我假设我需要创建一个文件
  • Google 地图 API 错误:此 API 密钥无权使用此服务或 API。地点 API 错误:ApiTargetBlockedMapError

    我开始从我使用的 CMS 内的 Google 地图小部件收到此错误 This API key is not authorized to use this service or API Places API error ApiTargetBl
  • 限制 Wagtail Steamfield 中特定 DocumentChooserBlock() 块的文件类型

    我试图限制 wagtail 流字段块内特定 DocumentChooserBlock 的查询结果 我已经知道您可以使用以下方法限制页面类型的文档选择器的文件类型hooks 但我想避免限制页面范围内可能的文件类型 以防我需要它们用于其他 St
  • Puput(基于 Wagtail 的博客)- 文件在哪里?

    我已将 puput 博客添加到现有的 Django 项目中 我遵循了设置独立博客应用程序的所有步骤 https puput readthedocs io en latest setup html https puput readthedoc
  • 从 S3 wagtail 提供静态文件和媒体文件

    我们将开始使用 S3 来托管我们的静态和媒体文件 有谁有一个很好的链接来描述如何用鹡鸰做到这两点 我们正在使用 Wagtail 1 9 我无法让他们两个同时工作 https wagtail io blog amazon s3 for med
  • 在迁移中移动 Wagtail 页面

    我正在重组我的 Wagtail 应用程序 以删除其中仅包含单个项目的 IndexPage 并将该项目移至当前 IndexPage 父级的子级 基本上是从这个开始 Page IndexPage ChildPages 其中只有 1 个 to t
  • 为什么 MyPage._meta.get_field("title").verbose_name 会更改 Wagtail 中所有标题的标签?

    我的 Wagtail 项目中有几个应用程序 其中之一是 新闻 其中包含新闻 页面 我想在管理中将标题的标签 标题 覆盖为 标题 News meta get field title verbose name Headline 结果 我在所有应
  • wagtail页面模型与其自身的多对多关系?

    所以我得到了一个带有 同伴 字段的 PlantDetailPage 模型 是的 植物可以是同伴 其中我应该能够选择其他 PlantDetailPages 我得到了显示的东西 在内联中创建新植物 是的 菜单中的菜单中的菜单 但有几个问题 1
  • Wagtail 为 MyPage 设置附加权限

    这里是鹡鸰新手 我试图为特定模型添加一些额外的权限 但 wagtail admin 中没有显示任何内容 我可以用 django 方式做到这一点 但我的印象是 wagtail 可以处理这种类型的权限 我在 wagtail 文档中找不到任何提示
  • Wagtail 根据登录用户的权限过滤页面子元素

    我正在使用 Wagtail 开发一个小型网站 该网站由一个 主页 和几个 子页面 组成 到目前为止 一切都非常简单 但是 根据用户 不是管理员 所在的组 应该显示正确的子页面 请参阅以下设置 最小化 以了解我在说什么 如果我在 ToolKi
  • 在 wagtailadmin 的 limit_choices_to 中使用 或 Q() 对象

    姜戈 1 10 5 def limit contributor choices limit Q group name contributor Q group name Group return limit author models For
  • 链接到 Wagtail CMS 中的特定页面

    在 Wagtail CMS 中 我不知道如何构建指向特定页面的链接 我想要我的模板中有一个 固定的 未创作的 链接BlogIndexPage to my BlogIndexArchivePage反之亦然 在官方文档中pageurl http
  • Streamfield 中的 Wagtail SnippetChooserBlock

    我在从片段中获取值时遇到一些问题 我已使用片段选择器块将其包含到流场中 生物片段 register snippet class BioSnippet models Model name models CharField max length
  • Wagtail 文档:大文件(>2GB)上传失败

    我正在尝试使用 Wagtail 应用程序中内置的 wagtaildocs 应用程序上传文件 我已经使用 Nginx 的 Digital Ocean 教程方法设置了 Ubuntu 16 04 服务器 鳐鱼 Postgres 一些初步澄清 在我
  • wagtail 中的嵌套类别/InlinePanel

    我很难实现 嵌套类别 之类的东西 PageA Cat1 SubCat1 SubCat2 Cat2 SubCat1 所有类别和子类别都应可由编辑排序和编辑 我的猜测是这样的 class CategoryTestPage Page conten
  • Wagtail / Hallo.js - 添加插件但修改的内容未保存

    我正在 Wagtail 1 3 1 Django 1 7 11 上运行 我已经激活了 Hallohtml 和 Hallojustify 插件 它们出现在工具栏中 没有图标 但有按钮 可以使用按钮 并且可以在文本区域中看到修改 我的意思是 例
  • 从 shell 添加/修改 wagtail 流场中的块值

    我有一个页面 其中包含一个 StreamField 正文和一个名为 HeadingBlock 的自定义块 class HeadingBlock blocks StructBlock heading blocks CharBlock cssi
  • Wagtail 自定义管理

    我是 Wagtail 和 Django 开发的新手 如何更改 Wagtail 管理页面的颜色 根据一些问答 我可以通过 core css 更改颜色 但是扫描代码需要很多时间 有一个更简单的方法 您可以注册 Wagtail Hook 在此处阅

随机推荐

  • Haven::read_sav 显示值标签而不是代码

    我在用着haven导入一个 sav文件到R 我想知道如何显示值标签而不是数字代码 在下面的示例中 我想显示物种名称而不是数字 1 2 3 library haven path lt system file examples iris sav
  • 如何使用交错的 Huggingface 数据集创建 PyTorch 数据加载器?

    当我交错数据集 获取标记化批次 将批次提供给 pytorch 数据加载器时 我收到错误 coding utf 8 issues with dataloader and custom data sets Automatically gener
  • Ant:如果目录不存在,如何忽略构建错误?

    我正在使用 Ant 1 8 1 如果目录不存在 如何忽略以下构建错误 我得到的错误是 BUILD FAILED Users davea myco2 myco build xml 211 Directory does not exist Us
  • 路由前的角度动画

    在我当前的项目中 我试图摆脱路由时跳过的 Angular 动画 在我的模板中 我有不同的 小部件 mat card在 css grid 布局中 我想让它平滑地出现和消失 我的子组件中的动画 路线指向的 看起来像 animations tri
  • `JTableHeader` 可以跨越多个列吗?

    我花了很长时间寻找这个 但我只找到了GroupableHeader代码 我需要 2 列中的 2 列上有一个标题JTable 如果不使用臭名昭著的方法 如何才能做到这一点 GroupableHeader 同时保持 JTableHeader 的
  • 如何在 R 中引用查找表将两个 data.frame 合并在一起

    我正在尝试合并两个data frames一起 基于每个中的公共列名称称为series id 这是我的合并语句 merge test growth series LUT test growth series by intersect seri
  • 如何通过链接描述文件将符号放置在特定地址处?

    这是关于 GNU Linker 的 我有一个 可以说 名为的变量myVar 现在我希望我的变量被放置在内存中的某个地址 我使用的编译器有一个 attribute blablabla 这样就可以了 不过我决定使用链接描述文件 从现在开始 我设
  • ReentrantReadWriteLock 中的公平锁定

    B Goetz 所著的 Java Concurrency In Practice 中 第 13 5 节说道 在 Java 5 0 中 读锁的行为更像是信号量而不是锁 仅维护活跃读者的数量 而不维护他们的身份 Java 6 中的行为已更改 以
  • 中断安全 FIFO 中的 DMB 指令

    相关这个线程 https stackoverflow com q 50800118 1488067 我有一个 FIFO 它应该可以跨 Cortex M4 上的不同中断工作 头部索引必须是 由以下人员原子编写 修改 多个中断 不是线程 通过单
  • 如何在 MVC 中创建国家和州/省的选择列表

    嗨 我是 MVC 甚至 asp 的新手 我想在 MVC 中创建一个表单 在一些示例的帮助下 我可以创建文本框 但我现在不明白如何创建选择列表 我尝试搜索许多在 MVC 中实现选择列表的示例 但我无法理解 我有一个表单 一半用 HTML 编码
  • C# 是否允许使用双分号 ; ;如果可以的话,有什么特殊的方法吗?

    我正在编写一条语句并且它可以编译 但编译器 VS 从未告诉我我放置了两次分号 这意味着在 ASP NET MVC 3 中 return Json mydata return Json mydata 两者都可以编译 但第一个在设计模式上是错误
  • Retrofit 仅在第一次给出 EOFException

    我第一次在我的 Android 项目中使用框架 Retrofit 它处理与后端的通信 现在最奇怪的部分是 在 Android 4 4 上 一切都像魅力一样 在下面的每个版本上 我得到一个 RetrofitError 类型 java io E
  • Android Studio:如何将我的 .aar 库链接到多个项目?

    我有一个在多个项目中使用的库 每次更新 和重建 此库时 我不想将 aar 复制并粘贴到使用此库的每个项目中 实现这一目标最方便 最有效的方法是什么 注意 我在 Mac OSX 上运行 Android Studio 1 0 RC2 将您的 A
  • 从 Lock() 内调用 UI 线程上的方法

    我有两种方法 MethodA MethodB MethodB必须在 UI 线程上运行 我需要他们在不允许的情况下一个接一个地运行MethodC在他们之间奔跑 MethodC当用户单击一个可爱的小按钮时调用 我做了什么来确保这是一个Lock围
  • 像在 PHP 中那样获取 $_GET,但在 Visual Basic 中?

    我有一个名为 WebBrowser1 的网络浏览器 我希望能够像在 PHP 中那样检测 GET 并将其放在 Textlabel 中 就像网址是 www example com page php myget true Visual Basic
  • 将 NOT_NULL 约束添加到 SQL 列

    我正在尝试使用以下命令将 NOT NULL 约束添加到 SQL h2 数据库中的列 ALTER TABLE CHARACTERS ADD CONSTRAINT nn PID NOT NULL PLAYER ID 这遵循我发现的模式here
  • 寻找有关如何使用 PHP 构建私人消息系统的教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 正在寻找有关如何使用 PHP 构建安全的私人消息传递系统的教程 非常感谢 到目前为止我一直在关注这个http www astahost c
  • Laravel 5.2 迁移:无法添加 char 数据类型的外键

    我正在尝试创建一个char 数据类型的可为空外键 当我运行迁移命令时 我收到以下错误 我不确定我哪里做错了 Illuminate Database QueryException SQLSTATE HY000 一般错误 1215 无法添加外键
  • 显示 ContextMenuStrip 但不在任务栏中显示

    我发现 当我执行 contextmenustrip 右键单击菜单 的 show 方法时 如果该位置超出其所属表单的位置 它也会显示在任务栏上 我正在尝试为单击通知图标时创建一个右键单击菜单 但由于菜单悬停在系统托盘上方而不是在表单内 因为右
  • 在 wagtail 中批量上传和创建包含图像的页面(迁移)

    我正在使用 wagtail 创建一个网站来替换某人现有的 weebly 网站 重新创建数百个页面实例并上传每个页面的每个图像需要花费几个小时 我已经有了我需要的页面模型 并且我的网站看起来很像 wagtail 文档中的入门教程 我想知道如何