I'm doing a migration from an old site, and I need to programmatically add raw html to a StreamField
on a Wagtail page. How do I do it?
The StreamField is a list which contains the value and type of the sub-blocks (we will see it in a bit). You can use the built-in block shipped with Wagtail or you can create your custom block. Some block can also contains sub-block so you can use it to create a complex nested data structure, which is powerful .
Orderables let you add movable content to your page without needing a StreamField. In this video, we'll create a Bootstrap 4 Image Gallery on our Home Page model using an Orderable.
The easiest way to do this is to make sure that RawHTMLBlock
is enabled on your StreamField
, and then insert it there. The process for adding content to the field is as follows:
import json
original_html = '<p>Hello, world!</p>'
# First, convert the html to json, with the appropriate block type
raw_json = json.dumps([{'type': 'raw_html', 'value': original_html}])
# Load Wagtail page
my_page = Page.objects.get(id=1)
# Assuming the stream field is called 'body',
# add the json string to the field
my_page.body = raw_json
my_page.save()
You can use this approach to add other kinds of blocks to the StreamField
- just make sure you create a list of dictionaries with the appropriate block type, convert it to json, and save.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With