diff --git a/dash/dash.py b/dash/dash.py index 0f04362689..48bce0984c 100644 --- a/dash/dash.py +++ b/dash/dash.py @@ -35,7 +35,6 @@ from . import _watch from . import _configs - _default_index = '''
@@ -49,6 +48,7 @@ ''' @@ -64,10 +64,12 @@ _re_index_entry = re.compile(r'{%app_entry%}') _re_index_config = re.compile(r'{%config%}') _re_index_scripts = re.compile(r'{%scripts%}') +_re_renderer_scripts = re.compile(r'{%renderer%}') _re_index_entry_id = re.compile(r'id="react-entry-point"') _re_index_config_id = re.compile(r'id="_dash-config"') _re_index_scripts_id = re.compile(r'src=".*dash[-_]renderer.*"') +_re_renderer_scripts_id = re.compile(r'id="_dash-renderer') # pylint: disable=too-many-instance-attributes @@ -271,6 +273,9 @@ def _add_url(self, name, view_func, methods=('GET',)): # e.g. for adding authentication with flask_login self.routes.append(name) + # default renderer string + self.renderer = 'var renderer = new DashRenderer();' + @property def layout(self): return self._layout @@ -464,6 +469,13 @@ def _generate_config_html(self): '' ).format(json.dumps(self._config())) + def _generate_renderer(self): + return ( + '' + ).format(self.renderer) + def _generate_meta_html(self): has_ie_compat = any( x.get('http-equiv', '') == 'X-UA-Compatible' @@ -527,6 +539,7 @@ def index(self, *args, **kwargs): # pylint: disable=unused-argument css = self._generate_css_dist_html() config = self._generate_config_html() metas = self._generate_meta_html() + renderer = self._generate_renderer() title = getattr(self, 'title', 'Dash') if self._favicon: @@ -547,12 +560,14 @@ def index(self, *args, **kwargs): # pylint: disable=unused-argument index = self.interpolate_index( metas=metas, title=title, css=css, config=config, - scripts=scripts, app_entry=_app_entry, favicon=favicon) + scripts=scripts, app_entry=_app_entry, favicon=favicon, + renderer=renderer) checks = ( (_re_index_entry_id.search(index), '#react-entry-point'), (_re_index_config_id.search(index), '#_dash-configs'), (_re_index_scripts_id.search(index), 'dash-renderer'), + (_re_renderer_scripts_id.search(index), 'new DashRenderer'), ) missing = [missing for check, missing in checks if not check] @@ -569,7 +584,7 @@ def index(self, *args, **kwargs): # pylint: disable=unused-argument def interpolate_index(self, metas='', title='', css='', config='', - scripts='', app_entry='', favicon=''): + scripts='', app_entry='', favicon='', renderer=''): """ Called to create the initial HTML string that is loaded on page. Override this method to provide you own custom HTML. @@ -589,19 +604,22 @@ def interpolate_index(self, **kwargs): {app_entry} {config} {scripts} + {renderer}