2011-01-20 7 views
7

Sto usando webpy framefork. Voglio servire file statico su una delle richieste. C'è un metodo speciale nel framework webpy o devo solo leggere e restituire quel file?Come pubblicare un file in webpy?

risposta

10

Se si esegue il server dev (senza apache):

Creare una directory (noto anche come una cartella) chiamato statico nella posizione dello script che esegue il server web.py. Quindi posiziona i file statici che desideri pubblicare nella cartella statica.

Ad esempio, l'URL http://localhost/static/logo.png invierà l'immagine ./static/logo.png al client.

Riferimento: http://webpy.org/cookbook/staticfiles


Update. Se si ha realmente bisogno per servire un file statico sul / si può semplicemente utilizzare un reindirizzamento:

#!/usr/bin/env python 

import web 

urls = (
    '/', 'index' 
) 

class index: 
    def GET(self): 
     # redirect to the static file ... 
     raise web.seeother('/static/index.html') 

app = web.application(urls, globals()) 

if __name__ == "__main__": app.run() 
+0

questo serve solo file in/percorso statico, ho bisogno di servire index.html su richiesta con percorso/ – codez

+0

@codez: aggiornata la mia risposta. – miku

+0

funziona solo se si esegue l'app web.py direttamente dalla cartella in cui si trova. se vuoi eseguire /path/to/my/web/app.py sei sfortunato. – Octopus

6

ho lottato con questo per l'ultimo paio di ore ... Yuck!

trovato due soluzioni che sono entrambi lavorano per me ... 1 - in .htaccess aggiungere questa linea prima della linea ModRewrite:

RewriteCond %{REQUEST_URI} !^/static/.* 

Questo farà in modo che le richieste alla/directory/static sono NON riscritto per andare al tuo script code.py.

2 - nella code.py aggiungere un gestore di statica e una voce di URL per ciascuna delle diverse directory:

urls = (
    '/' , 'index' , 
    '/add', 'add' , 
    '/(js|css|images)/(.*)', 'static', 
    '/one' , 'one' 
    ) 

class static: 
    def GET(self, media, file): 
     try: 
      f = open(media+'/'+file, 'r') 
      return f.read() 
     except: 
      return '' # you can send an 404 error here if you want 

Nota - ho rubato questo dal gruppo web.py google, ma non riesce a trovare il dang post ancora!

Uno di questi ha lavorato per me, sia all'interno dei modelli per web.py e per una chiamata diretta ad una pagina web che ho messo in "statico"

+0

Hai visto qualche vantaggio su questi metodi su http://webpy.org/cookbook/staticfiles? – dimo414

+0

Ho ottenuto questo per funzionare - non ho potuto ottenere altri metodi di lavoro, quindi credo che sia un vantaggio ;-) Stavo lavorando su un account di hosting condiviso, quindi potrebbe essere stato un po 'della mia lotta. –

+1

@tom - grazie! mi hai salvato un paio d'ore con questo post. – incognick

1

Non consiglio servire i file statici con web .py. Faresti meglio ad avere apache o nginx configurati per quello.

+0

perché no? sarebbe utile capire le tue ragioni. – Octopus

+0

Perché sarà lento –