prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Kolibri 0.16 - Resources of type HTML5 and exercises are not displayed
  ## Observed behavior
  This is a follow up to https://github.com/learningequality/kolibri/pull/9724#issuecomment-1408889097
  
  In the latest develop build both exercises and html resources are not being displayed when a user is navigating through the Library.
  
  ## Expected behavior
  It should be possible to preview the resource.
  
  ## Steps to reproduce the issue
  1. Install the the following [0. 16 build ](https://buildkite.com/learningequality/kolibri-debian/builds/5813#018603a8-a7d9-4c79-98d0-e2a0db6a7c69) and import the QA channel.
  2. Go to Library > QA Channel
  3. Click on any resource withing the HTML5 folder or the Exercises folder
  
  ## Videos
  
  HTML5:
  
  https://user-images.githubusercontent.com/79847249/215529161-a0e88738-b221-416a-beea-cf0c6192450f.mp4
  
  EXERCISES:
  
  https://user-images.githubusercontent.com/79847249/215529190-28ecdf59-db72-4b3a-a6df-2c72ab2f395c.mp4
  
  ## Console error
  
  ```
  pluginMediator.js:122 Kolibri Modules: kolibri.plugins.learn.app registered
  pluginMediator.js:122 Kolibri Modules: kolibri.plugins.media_player.main registered
  pluginMediator.js:122 Kolibri Modules: kolibri.plugins.pdf_viewer.main registered
  pluginMediator.js:122 Kolibri Modules: kolibri.plugins.epub_viewer.main registered
  pluginMediator.js:122 Kolibri Modules: kolibri.plugins.html5_viewer.main registered
  vue.runtime.esm.js:5753          GET http://127.0.0.1:51957/content/static/hashi/hashi-0efeb19f7e4ded20c73f.html 404 (Not Found)
  insertBefore @ vue.runtime.esm.js:5753
  insert @ vue.runtime.esm.js:6083
  (anonymous) @ vue.runtime.esm.js:6030
  createElm @ vue.runtime.esm.js:5969
  (anonymous) @ vue.runtime.esm.js:6560
  Vue._update @ vue.runtime.esm.js:3963
  updateComponent @ vue.runtime.esm.js:4081
  Watcher.get @ vue.runtime.esm.js:4495
  Watcher.run @ vue.runtime.esm.js:4570
  flushSchedulerQueue @ vue.runtime.esm.js:4326
  (anonymous) @ vue.runtime.esm.js:1989
  flushCallbacks @ vue.runtime.esm.js:1915
  Promise.then (async)
  timerFunc @ vue.runtime.esm.js:1942
  nextTick @ vue.runtime.esm.js:1999
  (anonymous) @ vue.runtime.esm.js:4418
  Watcher.update @ vue.runtime.esm.js:4560
  Vue.$forceUpdate @ vue.runtime.esm.js:3984
  forceRender @ vue.runtime.esm.js:3668
  (anonymous) @ vue.runtime.esm.js:3690
  (anonymous) @ vue.runtime.esm.js:336
  vue.runtime.esm.js:5753          GET http://127.0.0.1:51957/content/static/hashi/hashi-0efeb19f7e4ded20c73f.html 404 (Not Found)
  insertBefore @ vue.runtime.esm.js:5753
  insert @ vue.runtime.esm.js:6083
  (anonymous) @ vue.runtime.esm.js:6030
  createElm @ vue.runtime.esm.js:5969
  (anonymous) @ vue.runtime.esm.js:6260
  patchVnode @ vue.runtime.esm.js:6363
  (anonymous) @ vue.runtime.esm.js:6526
  Vue._update @ vue.runtime.esm.js:3963
  updateComponent @ vue.runtime.esm.js:4081
  Watcher.get @ vue.runtime.esm.js:4495
  Watcher.run @ vue.runtime.esm.js:4570
  flushSchedulerQueue @ vue.runtime.esm.js:4326
  (anonymous) @ vue.runtime.esm.js:1989
  flushCallbacks @ vue.runtime.esm.js:1915
  Promise.then (async)
  timerFunc @ vue.runtime.esm.js:1942
  nextTick @ vue.runtime.esm.js:1999
  (anonymous) @ vue.runtime.esm.js:4418
  Watcher.update @ vue.runtime.esm.js:4560
  Dep.notify @ vue.runtime.esm.js:730
  set @ vue.runtime.esm.js:1055
  sharedPropertyDefinition.set @ vue.runtime.esm.js:4644
  (anonymous) @ ContentPage.vue:312
  pluginMediator.js:122 Kolibri Modules: kolibri.plugins.perseus_viewer.main registered
  ```
  
  ## Usage Details
  Windows 10, Ubuntu - Chrome, Firefox
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `kolibri/deployment/default/alt_wsgi.py`
  Content:
  ```
  1 """
  2 WSGI config for the alternate origin server used for serving
  3 sandboxed content
  4 """
  5 import os
  6 
  7 import kolibri.core.content
  8 from kolibri.core.content.utils import paths
  9 from kolibri.core.content.zip_wsgi import get_application
  10 from kolibri.utils.kolibri_whitenoise import DynamicWhiteNoise
  11 
  12 os.environ.setdefault(
  13     "DJANGO_SETTINGS_MODULE", "kolibri.deployment.default.settings.base"
  14 )
  15 
  16 
  17 def generate_alt_wsgi_application():
  18     alt_content_path = "/" + paths.get_content_url(
  19         paths.zip_content_path_prefix()
  20     ).lstrip("/")
  21 
  22     content_dirs = [paths.get_content_dir_path()] + paths.get_content_fallback_paths()
  23 
  24     content_static_path = os.path.join(
  25         os.path.dirname(kolibri.core.content.__file__), "static"
  26     )
  27 
  28     # Mount static files
  29     return DynamicWhiteNoise(
  30         get_application(),
  31         dynamic_locations=[
  32             (alt_content_path, content_dir) for content_dir in content_dirs
  33         ]
  34         + [(paths.zip_content_static_root(), content_static_path)],
  35         app_paths=paths.get_zip_content_base_path(),
  36     )
  37 
  38 
  39 alt_application = generate_alt_wsgi_application()
  40
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/kolibri/deployment/default/alt_wsgi.py b/kolibri/deployment/default/alt_wsgi.py
  --- a/kolibri/deployment/default/alt_wsgi.py
  +++ b/kolibri/deployment/default/alt_wsgi.py
  @@ -32,7 +32,7 @@
               (alt_content_path, content_dir) for content_dir in content_dirs
           ]
           + [(paths.zip_content_static_root(), content_static_path)],
  -        app_paths=paths.get_zip_content_base_path(),
  +        app_paths=[paths.get_zip_content_base_path()],
       )
  
verification_info: {"golden_diff": "diff --git a/kolibri/deployment/default/alt_wsgi.py b/kolibri/deployment/default/alt_wsgi.py\n--- a/kolibri/deployment/default/alt_wsgi.py\n+++ b/kolibri/deployment/default/alt_wsgi.py\n@@ -32,7 +32,7 @@\n             (alt_content_path, content_dir) for content_dir in content_dirs\n         ]\n         + [(paths.zip_content_static_root(), content_static_path)],\n-        app_paths=paths.get_zip_content_base_path(),\n+        app_paths=[paths.get_zip_content_base_path()],\n     )\n", "issue": "Kolibri 0.16 - Resources of type HTML5 and exercises are not displayed\n## Observed behavior\r\nThis is a follow up to https://github.com/learningequality/kolibri/pull/9724#issuecomment-1408889097\r\n\r\nIn the latest develop build both exercises and html resources are not being displayed when a user is navigating through the Library.\r\n\r\n## Expected behavior\r\nIt should be possible to preview the resource.\r\n\r\n## Steps to reproduce the issue\r\n1. Install the the following [0. 16 build ](https://buildkite.com/learningequality/kolibri-debian/builds/5813#018603a8-a7d9-4c79-98d0-e2a0db6a7c69) and import the QA channel.\r\n2. Go to Library > QA Channel\r\n3. Click on any resource withing the HTML5 folder or the Exercises folder\r\n\r\n## Videos\r\n\r\nHTML5:\r\n\r\nhttps://user-images.githubusercontent.com/79847249/215529161-a0e88738-b221-416a-beea-cf0c6192450f.mp4\r\n\r\nEXERCISES:\r\n\r\nhttps://user-images.githubusercontent.com/79847249/215529190-28ecdf59-db72-4b3a-a6df-2c72ab2f395c.mp4\r\n\r\n## Console error\r\n\r\n```\r\npluginMediator.js:122 Kolibri Modules: kolibri.plugins.learn.app registered\r\npluginMediator.js:122 Kolibri Modules: kolibri.plugins.media_player.main registered\r\npluginMediator.js:122 Kolibri Modules: kolibri.plugins.pdf_viewer.main registered\r\npluginMediator.js:122 Kolibri Modules: kolibri.plugins.epub_viewer.main registered\r\npluginMediator.js:122 Kolibri Modules: kolibri.plugins.html5_viewer.main registered\r\nvue.runtime.esm.js:5753          GET http://127.0.0.1:51957/content/static/hashi/hashi-0efeb19f7e4ded20c73f.html 404 (Not Found)\r\ninsertBefore @ vue.runtime.esm.js:5753\r\ninsert @ vue.runtime.esm.js:6083\r\n(anonymous) @ vue.runtime.esm.js:6030\r\ncreateElm @ vue.runtime.esm.js:5969\r\n(anonymous) @ vue.runtime.esm.js:6560\r\nVue._update @ vue.runtime.esm.js:3963\r\nupdateComponent @ vue.runtime.esm.js:4081\r\nWatcher.get @ vue.runtime.esm.js:4495\r\nWatcher.run @ vue.runtime.esm.js:4570\r\nflushSchedulerQueue @ vue.runtime.esm.js:4326\r\n(anonymous) @ vue.runtime.esm.js:1989\r\nflushCallbacks @ vue.runtime.esm.js:1915\r\nPromise.then (async)\r\ntimerFunc @ vue.runtime.esm.js:1942\r\nnextTick @ vue.runtime.esm.js:1999\r\n(anonymous) @ vue.runtime.esm.js:4418\r\nWatcher.update @ vue.runtime.esm.js:4560\r\nVue.$forceUpdate @ vue.runtime.esm.js:3984\r\nforceRender @ vue.runtime.esm.js:3668\r\n(anonymous) @ vue.runtime.esm.js:3690\r\n(anonymous) @ vue.runtime.esm.js:336\r\nvue.runtime.esm.js:5753          GET http://127.0.0.1:51957/content/static/hashi/hashi-0efeb19f7e4ded20c73f.html 404 (Not Found)\r\ninsertBefore @ vue.runtime.esm.js:5753\r\ninsert @ vue.runtime.esm.js:6083\r\n(anonymous) @ vue.runtime.esm.js:6030\r\ncreateElm @ vue.runtime.esm.js:5969\r\n(anonymous) @ vue.runtime.esm.js:6260\r\npatchVnode @ vue.runtime.esm.js:6363\r\n(anonymous) @ vue.runtime.esm.js:6526\r\nVue._update @ vue.runtime.esm.js:3963\r\nupdateComponent @ vue.runtime.esm.js:4081\r\nWatcher.get @ vue.runtime.esm.js:4495\r\nWatcher.run @ vue.runtime.esm.js:4570\r\nflushSchedulerQueue @ vue.runtime.esm.js:4326\r\n(anonymous) @ vue.runtime.esm.js:1989\r\nflushCallbacks @ vue.runtime.esm.js:1915\r\nPromise.then (async)\r\ntimerFunc @ vue.runtime.esm.js:1942\r\nnextTick @ vue.runtime.esm.js:1999\r\n(anonymous) @ vue.runtime.esm.js:4418\r\nWatcher.update @ vue.runtime.esm.js:4560\r\nDep.notify @ vue.runtime.esm.js:730\r\nset @ vue.runtime.esm.js:1055\r\nsharedPropertyDefinition.set @ vue.runtime.esm.js:4644\r\n(anonymous) @ ContentPage.vue:312\r\npluginMediator.js:122 Kolibri Modules: kolibri.plugins.perseus_viewer.main registered\r\n```\r\n\r\n## Usage Details\r\nWindows 10, Ubuntu - Chrome, Firefox\n", "before_files": [{"content": "\"\"\"\nWSGI config for the alternate origin server used for serving\nsandboxed content\n\"\"\"\nimport os\n\nimport kolibri.core.content\nfrom kolibri.core.content.utils import paths\nfrom kolibri.core.content.zip_wsgi import get_application\nfrom kolibri.utils.kolibri_whitenoise import DynamicWhiteNoise\n\nos.environ.setdefault(\n    \"DJANGO_SETTINGS_MODULE\", \"kolibri.deployment.default.settings.base\"\n)\n\n\ndef generate_alt_wsgi_application():\n    alt_content_path = \"/\" + paths.get_content_url(\n        paths.zip_content_path_prefix()\n    ).lstrip(\"/\")\n\n    content_dirs = [paths.get_content_dir_path()] + paths.get_content_fallback_paths()\n\n    content_static_path = os.path.join(\n        os.path.dirname(kolibri.core.content.__file__), \"static\"\n    )\n\n    # Mount static files\n    return DynamicWhiteNoise(\n        get_application(),\n        dynamic_locations=[\n            (alt_content_path, content_dir) for content_dir in content_dirs\n        ]\n        + [(paths.zip_content_static_root(), content_static_path)],\n        app_paths=paths.get_zip_content_base_path(),\n    )\n\n\nalt_application = generate_alt_wsgi_application()\n", "path": "kolibri/deployment/default/alt_wsgi.py"}], "after_files": [{"content": "\"\"\"\nWSGI config for the alternate origin server used for serving\nsandboxed content\n\"\"\"\nimport os\n\nimport kolibri.core.content\nfrom kolibri.core.content.utils import paths\nfrom kolibri.core.content.zip_wsgi import get_application\nfrom kolibri.utils.kolibri_whitenoise import DynamicWhiteNoise\n\nos.environ.setdefault(\n    \"DJANGO_SETTINGS_MODULE\", \"kolibri.deployment.default.settings.base\"\n)\n\n\ndef generate_alt_wsgi_application():\n    alt_content_path = \"/\" + paths.get_content_url(\n        paths.zip_content_path_prefix()\n    ).lstrip(\"/\")\n\n    content_dirs = [paths.get_content_dir_path()] + paths.get_content_fallback_paths()\n\n    content_static_path = os.path.join(\n        os.path.dirname(kolibri.core.content.__file__), \"static\"\n    )\n\n    # Mount static files\n    return DynamicWhiteNoise(\n        get_application(),\n        dynamic_locations=[\n            (alt_content_path, content_dir) for content_dir in content_dirs\n        ]\n        + [(paths.zip_content_static_root(), content_static_path)],\n        app_paths=[paths.get_zip_content_base_path()],\n    )\n\n\nalt_application = generate_alt_wsgi_application()\n", "path": "kolibri/deployment/default/alt_wsgi.py"}]}