diff --git a/panel/io/convert.py b/panel/io/convert.py
index 08be802dcc..b1ee904c7a 100644
--- a/panel/io/convert.py
+++ b/panel/io/convert.py
@@ -348,7 +348,7 @@ def script_to_html(
loading_style = f''
else:
loading_style = f''
- css_resources.append(loading_style)
+ css_resources.append(loading_style)
spinner_css = loading_css(
config.loading_spinner, config.loading_color, config.loading_max_height
)
diff --git a/panel/tests/ui/io/test_convert.py b/panel/tests/ui/io/test_convert.py
index b4ed470917..07791d18a0 100644
--- a/panel/tests/ui/io/test_convert.py
+++ b/panel/tests/ui/io/test_convert.py
@@ -41,6 +41,13 @@
pn.Row(button, pn.bind(lambda c: c, button.param.clicks)).servable();
"""
+template_button_app = """
+import panel as pn
+pn.extension(template='bootstrap')
+button = pn.widgets.Button()
+pn.Row(button, pn.bind(lambda c: c, button.param.clicks)).servable();
+"""
+
slider_app = """
import panel as pn
slider = pn.widgets.FloatSlider()
@@ -180,6 +187,19 @@ def test_pyodide_test_convert_button_app(http_serve, page, runtime):
assert [msg for msg in msgs if msg.type == 'error' and 'favicon' not in msg.location['url']] == []
+@pytest.mark.parametrize('runtime', ['pyodide', 'pyscript', 'pyodide-worker'])
+def test_pyodide_test_convert_template_button_app(http_serve, page, runtime):
+ msgs = wait_for_app(http_serve, button_app, page, runtime)
+
+ expect(page.locator('pre:not([class])')).to_have_text('0')
+
+ page.click('.bk-btn')
+
+ expect(page.locator('pre:not([class])')).to_have_text('1')
+
+ assert [msg for msg in msgs if msg.type == 'error' and 'favicon' not in msg.location['url']] == []
+
+
@pytest.mark.parametrize('runtime', ['pyodide', 'pyscript', 'pyodide-worker'])
def test_pyodide_test_convert_slider_app(http_serve, page, runtime):
msgs = wait_for_app(http_serve, slider_app, page, runtime)