2010-11-03 6 views
1

J'utilise python 2.6.5 pour développer une application pour google app engine - je ne suis pas trop familier avec python, mais j'apprends.en utilisant un deux-points dans une chaîne en python

je suis en train de mettre une url dans une chaîne si variable = "string http://domain.name"

puis-je imprimer la ficelle. le problème est, si le colon (après http) est dans la chaîne, je ne reçois aucune sortie et je ne sais pas pourquoi.

J'ai essayé d'échapper à la chaîne avec:

  • "" "http://domain.name" ""
  • r "http://domain.name"
  • « http \: //domain.name »
  • "http \: //domain.name"
  • "http \\: //domain.name"
  • "http :: //domain.name"

aucun d'entre eux semblent fonctionner et je ne suis pas sûr de ce que pour essayer

Le contexte est comme si

variables.py est:

... 
HOST_URL = "http://domain.name" 
... 

exemple logout.py

import variables 
import sys 

... 

class Logout(webapp.RequestHandler): 
    """ RequestHandler for when a user wishes to logout from the system.""" 
    def post(self): 
     self.get() 

    def get(self): 
     print(variables.HOST_URL) 
     print('hi') 
     self.redirect(variables.HOST_URL) 
     sys.exit() 

ou

dans le fichier f unctions.py

import variables 
import sys 

... 

def sendhome(requesthandler) 
    print 'go to '+variables.HOST_URL 
    requesthandler.redirect(variables.HOST_URL) 
    sys.exit() 

appelé à partir d'un contexte comme:

from functions import sendhome 

... 

class Logout(webapp.RequestHandler): 
    """ RequestHandler for when a user wishes to logout from the system.""" 
    def post(self): 
     self.get() 

    def get(self): 
     sendhome(self) 

toute aide serait appréciée

grâce

+4

S'il vous plaît, montrer un peu de contexte. –

+4

Voulez-vous dire que 'print' http://domain.name '' n'imprime pas cette chaîne entière? Cela semble hautement improbable. –

+0

il n'a pas jusqu'à ce que j'ai supprimé sys.exit() de dessous. Je ne sais pas pourquoi cela a empêché l'impression de l'url et pas le salut, mais il l'a fait. – m3z

Répondre

7

Si je ne suis pas horrible erreur, GAE utilise WSGI, vous N'imprimez pas simplement des choses, vous êtes censé retourner un objet de réponse HTTP correct (ce n'est pas PHP). Je suppose que si vous accédez à la page en utilisant firefox + firebug et regardez l'en-tête network-> vous verrez que le navigateur prend http: comme en-tête HTTP avec la valeur "//domain.name".

Édité: Au fait, ne devriez-vous pas utiliser "self.response.out.write" au lieu de "print"?

+0

c'était dans le contexte que vous avez demandé. le sys.exit() – m3z

+0

google.appengine.ext.webapp.WSGIApplication est bien meilleur que CGI. –

+0

donc je suppose que les en-têtes que j'ai mis en utilisant le webapp.RequestHandler ne sont pas envoyés si j'appelle sys.exit() est-il possible de contourner cela? fondamentalement je veux empêcher toute autre exécution si une redirection se produit – m3z

0

Le problème était le sys.exit() après l'appel à imprimer ou rediriger

Questions connexes