Ergänzend zu ``bottle`` sei noch zusagen, dass hier einiges einfacher gemacht werden kann/sollte. Allein der Teil mit den statischen Dateien. Auch kann dank der Templat-Engine - vor allem wenn das Projekt wächst - einiges vereinfacht werden. Template Dateien enden in bottel mit .tpl und werden im Ordner ``views`` abgelegt. In der ``bottle.py`` ist das so hinterlegt und macht das ganze dann einfacher.
http://bottlepy.org/docs/dev/stpl.html#simpletemplate-engine
Auch in der App selber ist das try - except Konstrukt sinnfrei, weil bottle dies bei den Server-APIs bereits mitliefert.
Eine korrekte Ordnerstruktur könnte wie folgt aussehen:
- my_porject
- htdocs # kann frei benannt werden
- css
- js
- img
- views # muss so benannt werden
- index.tpl
- layout.tpl
- my_app.py
app.py
from bottle import route, run, template, error, static_file
from random import randint
STATIC_FOLDER = '/home/pi/Python/my_project'
@route('/static/:path#.+#')
def static_files(path):
return static_file(path, root=STATIC_FOLDER)
@route('/')
def main_handler():
return template('index', values=randint(1, 1000))
@error(404)
def error404(error):
return 'Error 404: Nothing here, sorry.'
run(host='10.0.2.114', port=8080, reloader=True, debug=True)
Alles anzeigen
layout.tpl
<!DOCTYPE html>
<html lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href="/static/css/bootstrap.css" rel="stylesheet">
<title>{{title or 'No title'}}</title>
<body>
<div class="container">
{{!base}}
</div>
</body>
</html>
Alles anzeigen
index.tpl
Edit:
und die obigen Beispiele halten sich allesamt nicht an die Namenskonvention. z.B. werden oben Funktionen wie Klassen definiert/geschrieben