diff --git a/addons/web_editor/static/src/js/backend/field_html.js b/addons/web_editor/static/src/js/backend/field_html.js
index cc06bc53c96de00853b13093646435ea65b51d34..28613d9e0a759e4af2da29ec5b6218c155fa64f3 100644
--- a/addons/web_editor/static/src/js/backend/field_html.js
+++ b/addons/web_editor/static/src/js/backend/field_html.js
@@ -3,6 +3,7 @@ odoo.define('web_editor.field.html', function (require) {
 
 var ajax = require('web.ajax');
 var basic_fields = require('web.basic_fields');
+var config = require('web.config');
 var core = require('web.core');
 var Wysiwyg = require('web_editor.wysiwyg.root');
 var field_registry = require('web.field_registry');
@@ -14,6 +15,8 @@ var TranslatableFieldMixin = basic_fields.TranslatableFieldMixin;
 var QWeb = core.qweb;
 var assetsLoaded;
 
+var jinjaRegex = /(^|\n)\s*%\s(end|set\s)/;
+
 /**
  * FieldHtml Widget
  * Intended to display HTML content. This widget uses the wysiwyg editor
@@ -96,6 +99,10 @@ var FieldHtml = basic_fields.DebouncedField.extend(TranslatableFieldMixin, {
      */
     commitChanges: function () {
         var self = this;
+        if (config.isDebug() && this.mode === 'edit') {
+            var layoutInfo = $.summernote.core.dom.makeLayoutInfo(this.wysiwyg.$editor);
+            $.summernote.pluginEvents.codeview(undefined, undefined, layoutInfo, false);
+        }
         if (this.mode == "readonly" || !this.isRendered) {
             return this._super();
         }
@@ -199,6 +206,20 @@ var FieldHtml = basic_fields.DebouncedField.extend(TranslatableFieldMixin, {
                 if (para && para[1] && para[1].indexOf('checklist') === -1) {
                     para[1].splice(2, 0, 'checklist');
                 }
+                if (config.isDebug()) {
+                    options.codeview = true;
+                    var view = _.find(options.toolbar, function (item) {
+                        return item[0] === 'view';
+                    });
+                    if (view) {
+                        if (!view[1].includes('codeview')) {
+                            view[1].splice(-1, 0, 'codeview');
+                        }
+                    } else {
+                        options.toolbar.splice(-1, 0, ['view', ['codeview']]);
+                    }
+                }
+                options.prettifyHtml = false;
                 return options;
             },
         });
@@ -341,7 +362,7 @@ var FieldHtml = basic_fields.DebouncedField.extend(TranslatableFieldMixin, {
      */
     _textToHtml: function (text) {
         var value = text || "";
-        if (/%\send/.test(value)) { // is jinja
+        if (jinjaRegex.test(value)) { // is jinja
             return value;
         }
         try {
@@ -464,6 +485,12 @@ var FieldHtml = basic_fields.DebouncedField.extend(TranslatableFieldMixin, {
             top: '+5px',
         });
         this.$el.append($button);
+        // force source editor if it contains multiline Jinja directives
+        if (jinjaRegex.test(this._getValue())) {
+            var layoutInfo = $.summernote.core.dom.makeLayoutInfo(this.wysiwyg.$editor);
+            layoutInfo.toolbar().hide();
+            $.summernote.pluginEvents.codeview(undefined, undefined, layoutInfo, true);
+        }
     },
     /**
      * @private