{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Verzeichnisformat für Bokeh-Apps und Templates\n", "\n", "Bokeh-Apps können auch mit einem Verzeichnisformat definiert werden. Dieses Format ermöglicht die Verwendung zusätzlicher Module, Daten, Templates, Themes und anderer Funktionen. Das Verzeichnis sollte eine `main.py`-Datei enthalten, das der *Einstiegspunkt* für die App ist, es können jedoch weitere Teile enthalten sein:\n", "```\n", ".\n", "└── myapp\n", " ├── __init__.py\n", " ├── main.py\n", "    ├── request_handler.py\n", "    ├── static\n", " │ └── css\n", " │ └── custom.min.css\n", "    ├── templates\n", "    │   └── index.html\n", "    └── theme.yaml\n", "```\n", "\n", "* `__init__.py`\n", "\n", " initiiert dieses Paket.\n", " \n", " Dort können auch Importe relativ zum Paket vorgenommen werden, z.B. `from . import mymod` und `from .mymod import func`.\n", "\n", "* `request_handler.py`\n", "\n", " für optionale Funktionen, z.B., um HTTP-Anfragen zu verarbeiten und ein Dict zurückzugeben, das ein Session-Token enthält, wie in [Request handler hooks](https://docs.bokeh.org/en/2.4.0/docs/user_guide/server.html#userguide-server-request-handler) beschrieben.\n", "\n", "* `app_hooks.py`\n", "\n", " für optionale Callbacks, die in verschiedenen Phasen der Ausführung ausgelöst werden können, wie in [Lifecycle hooks](https://docs.bokeh.org/en/2.4.0/docs/user_guide/server.html#userguide-server-applications-hooks) beschrieben.\n", "\n", "* `static`\n", "\n", " Unterverzeichnis für statische Ressourcen dieser Anwendung.\n", "\n", "* `theme.yaml`\n", "\n", " zum Deklarieren von Standardattributen, die Bokeh auf Modelltypen anwenden soll.\n", "\n", "* `templates`\n", "\n", " Unterverzeichnis mit einer Jinja-Vorlage `index.html`. Das Verzeichnis kann weitere Jinja-Vorlagen enthalten, auf die `index.html` verweist.\n", " \n", " Weitere Informationen findet ihr unter [Customizing the application’s Jinja template](https://docs.bokeh.org/en/2.4.0/docs/user_guide/server.html#userguide-server-template).\n", "\n", "Ein komplettes Beispiel findet ihr unter: https://github.com/bokeh/bokeh/tree/branch-3.3/examples/server/app/dash. Nachdem ihr den `dash`-Ordner heruntergeladen habt, könnt ihr den Bokeh-Server starten mit\n", "\n", "``` bash\n", "$ pipenv run python -m bokeh serve --show dash/\n", "\n", "$ pipenv run python -m bokeh serve --show examples/app/dash/\n", "2019-02-08 19:02:42,829 Starting Bokeh server version 1.0.4 (running on Tornado 5.1.1)\n", "2019-02-08 19:02:42,835 Bokeh app running at: http://localhost:5006/dash\n", "```\n", "![Bokeh dashboard](bokeh-dashboard.png)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.11 Kernel", "language": "python", "name": "python311" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }