Sto eseguendo una migrazione da un vecchio sito e ho bisogno di aggiungere codice HTML in modo programmatico a StreamField
su una pagina Wagtail. Come lo faccio?Come posso aggiungere il contenuto a livello di codice a Wagtail StreamField?
8
A
risposta
13
Il modo più semplice per eseguire questa operazione è assicurarsi che RawHTMLBlock
sia abilitato su StreamField
e quindi inserirlo lì. Il processo per l'aggiunta di contenuti al campo è la seguente:
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()
È possibile utilizzare questo metodo per aggiungere altri tipi di blocchi per il StreamField
- solo assicurarsi di creare un elenco di dizionari con il tipo di blocco del caso, convertire a JSON, e salva.
Si noti che almeno in Wagtail 1.5 non è necessario utilizzare una stringa JSON creata da una matrice di dizionari. Puoi invece usare direttamente una serie di tuple, in questo modo: 'my_page.body = [('raw_html', original_html)]' – CoreDumpError