Problem - Serving web pages on the desktop (SimpleHTTPServer)

B

Ben

Hi there,

Perhaps someone can help me. For some reason, when my Python script runs
and loads an HTML page in a new browser window at the local host
(desktop), the links to my stylesheet and all the images are broken. I
did check the HTML file by itself...everything loaded fine ;)

Here's my script:
--------------------
# File: webbrowser-test.py

import webbrowser, SimpleHTTPServer
from StringIO import StringIO

f=open('testpage.html', 'rb')
myPage = f.read()

class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def send_head(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
return StringIO(myPage)
webbrowser.open("http://127.0.0.1:8000", new=0, autoraise=1)
SimpleHTTPServer.test(MyRequestHandler)

--------------------

Here's my sample directory:
---------------------------------
webbrowser-test.py
testpage.html
m_files/
|_____stylesheet.css
|_____logo.gif
--------------------------------

Thanks for having a look. My next step is to process form input using
AJAX. I'll post working snippets of code here as I progress.

Ben
 
P

Paul Boddie

Ben said:
Perhaps someone can help me. For some reason, when my Python script runs
and loads an HTML page in a new browser window at the local host
(desktop), the links to my stylesheet and all the images are broken. I
did check the HTML file by itself...everything loaded fine ;)

I've just had a brief look at the SimpleHTTPServer documentation, and
whilst I may have misunderstood what is required from the admittedly
dry prose, I think I can make a few suggestions.
Here's my script:
--------------------
# File: webbrowser-test.py

import webbrowser, SimpleHTTPServer
from StringIO import StringIO

f=open('testpage.html', 'rb')
myPage = f.read()

Here, you're reading the page to serve it up later, but why aren't you
letting the handler fetch the page from the file? Surely, that's what
the handler does in this case.
class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def send_head(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
return StringIO(myPage)

Here, you're serving up the page. However, send_head appears not to be
part of the public interface to the handler, so it looks like you're
overriding some fairly fundamental behaviour of the handler which stops
any other file from being served as well. Perhaps you should remove
this method.
webbrowser.open("http://127.0.0.1:8000", new=0, autoraise=1)
SimpleHTTPServer.test(MyRequestHandler)

--------------------

Here's my sample directory:
---------------------------------
webbrowser-test.py
testpage.html
m_files/
|_____stylesheet.css
|_____logo.gif
--------------------------------

With testpage.html in the current directory, without the send_head
method, you should still get the page served up. However, you need to
make sure that the files in the subdirectory are referenced properly in
your page: something like "m_files/logo.gif" should cause the logo to
be fetched.
Thanks for having a look. My next step is to process form input using
AJAX. I'll post working snippets of code here as I progress.

Good luck!

Paul
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,480
Members
44,900
Latest member
Nell636132

Latest Threads

Top