How to active jinja support in text field?

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
2 Likes

Thanks for the script

Cool!