I want to use Frappe jinja feature to fetch field value directly to text editor field like print format
How to achieve this ?, Anyone have idea about this
I want to use Frappe jinja feature to fetch field value directly to text editor field like print format
How to achieve this ?, Anyone have idea about this
You can write client/server scripts to render Jinja for your text field.
The following client script renders values for Jinja tags in real time for the text field ‘TEXT_FIELD’ (replace it with your actual field name)
frappe.ui.form.on('YOUR DOCTYPE', {
TEXT_FIELD: function(frm) {
if (!frm.doc.TEXT_FIELD) return;
let rendered_text = frm.doc.TEXT_FIELD;
if (rendered_text.includes('{{ doc.')) {
Object.entries(frm.doc).forEach(([field, value]) => {
const template = `{{ doc.${field} }}`;
if (rendered_text.includes(template)) {
rendered_text = rendered_text.replace(template, value || '');
}
});
frm.set_value('TEXT_FIELD', rendered_text);
}
}
});
If your data is populated through APIs/Triggers then you can use a server script that runs after_save to replace jinja tags with values.
if doc.TEXT_FIELD:
rendered_text = doc.TEXT_FIELD
field_dict = doc.as_dict()
if "{{ doc." in rendered_text:
for field, value in field_dict.items():
template = "{{ doc." + field + " }}"
if template in rendered_text:
rendered_text = rendered_text.replace(template, str(value or ""))
if rendered_text != doc.TEXT_FIELD:
doc.TEXT_FIELD = rendered_text
Thanks for the script
Cool!