Ich stehe im Augenblick etwas auf Kriegsfuss mit der Tornado Dokumentation, sicher stet alles irgendwo, aber bis man dort ist wo geanu das steht was man sucht ist noch schwierig. Abgesehen von den vielen Tipfehlern in den Beispiel codes...
Ich versuche eine primäre website in Tabs darzustellen (JQery ui). Das sieht auch schon ganz nett aus.
Die primäre website lädt je nach ausgewähltem TAB eine sekundäre Seite nach. Das funktioniert auch soweit.
Beim Laden der Sites wird im Browser eine Warnung geworfen, dass favicon.png nicht geladen werden kann.
Dazu habe ich dann ein Tool verwendet um icons zu erzeugen und die Ergebnisse in der primären website eingebunden sowie die icons mit Zugemüse in einen Pfad static unter dem Projekt eingehängt.
Der Browser sollte nun Plattform abhängig das richtige Icon darstellen. Stattdessen wird im Browser nun eine Reihe von Fehlern erzeugt beim Versuch Icons in verschiedener Grösse vom Server anzufordern.
Mir ist klar, dass die Anforderung an die Root url geht, habe nun versucht den webserver per StaticFileHandler dazu zu bewegen die icons (.png) aus dem Pfad static zu holen. Das gelingt aber nicht.
Weiss jemand Rat, der mehr Erfahrung mit Tornado hat?
Hier der Code des webservers:
# -*- coding: utf-8 -*-
###############################################################################
# Class Prozess webserver
# Version: 2016.01.30
#
###############################################################################
import tornado.ioloop
import tornado.web
import os
class ProcessWebserver:
def Run(self, WLQueue, WPQueue, MQueue, LQueue, PQueue):
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Tornado webserver is running!")
class StoryHandler1(tornado.web.RequestHandler):
def initialize(self, db):
self.LQueue = db[0]
self.WLQueue = db[1]
self.MQueue = db[2]
def get(self, filename):
# MQueue.put("I@ StoryHandler1: " + filename)
# handle buttons
if filename == "1":
self.LQueue.put(["Q@", ""])
filename = "Robbi.html"
elif filename == "2":
self.LQueue.put(["P@", "bwd"])
filename = "Robbi.html"
elif filename == "3":
self.LQueue.put(["P@", "fwd"])
filename = "Robbi.html"
elif filename == "4":
self.LQueue.put(["P@", "ft"])
filename = "Robbi.html"
elif filename == "5":
self.LQueue.put(["P@", "lt"])
filename = "Robbi.html"
# handle html sources
self.file = open("templates/" + filename, "r")
self.site = self.file.read()
self.file.close()
if filename == "Alarmlist.html":
# get actual alarm list page
# ask LQueue for data
self.LQueue.put(["R@", ""])
# read WLQueue
message = WLQueue.get()
# put data to head table
self.siteCopy = self.site.replace("?actual", message[0][0])
self.siteCopy = self.siteCopy.replace("?last", message[0][1])
# put data to body table
for i in range(1, len(message)):
row = message[i]
for j in range(0, len(row)):
self.siteCopy = self.siteCopy.replace('id="' + str(i) + "." + str(j + 1) + '">' + ' ',
'id="' + str(i) + "." + str(j + 1) + '">' + row[j])
self.write(self.siteCopy)
else:
self.write(self.site)
class StoryHandler2(tornado.web.RequestHandler):
def get(self, filename):
# deliver files to page
# read file
self.file = open("js/" + filename, "r")
self.script = self.file.read()
self.file.close()
self.set_header("Content-Type", "text/javascript")
self.write(self.script)
class StoryHandler3(tornado.web.RequestHandler):
def get(self, filename):
# deliver files to page
# read file
self.file = open("css/" + filename, "r")
self.script = self.file.read()
self.file.close()
# write to page
# self.set_header("Content-Type", "text/css")
self.write(self.script)
self.settings = {
"debug": True,
"static_path": os.path.join(os.path.dirname(__file__), "static")}
def make_app():
return tornado.web.Application([
(r"/(.png)", tornado.web.StaticFileHandler, dict(path=self.settings["static_path"])),
(r"/", MainHandler),
(r"/Robbi/(.*)", StoryHandler1, dict(db=[LQueue, WLQueue, MQueue])),
(r"/js/(.*)", StoryHandler2),
(r"/css/(.*)", StoryHandler3)
], **self.settings)
app = make_app()
app.listen(8080)
tornado.ioloop.IOLoop.current().start()
Alles anzeigen