Python de GAE: los archivos estáticos no se cargan en localhost, pero se cargan perfectamente cuando la aplicación se implementa en appspot

Estoy experimentando un problema extraño, busqué una solución pero hasta ahora, parece único.

Mi problema es que mis archivos estáticos (css, plantillas, javascript, etc.) no se cargan cuando ejecuto la aplicación usando localhost en GAE. Sin embargo, cuando implemento la aplicación en los servidores GAE (appspot), ¡estos archivos estáticos funcionan perfectamente bien!

Esto incluso ocurre con la aplicación de Guestbook predeterminada que se encuentra en la documentación de GAE.

Estoy usando GAE launcher (Python) 1.9.6 en Windows. Python es la versión de 64 bits, 2.7.7. Ya me he asegurado de que GAE esté apuntando a la ubicación correcta para python.

Estoy experimentando este problema con todas las aplicaciones hasta ahora, así que dudo que sea un problema con el código. Sin embargo, aquí está el código para su referencia:

app.yaml

application: ipeech version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /stylesheets static_dir: stylesheets - url: /.* script: guestbook.application libraries: - name: webapp2 version: latest - name: jinja2 version: latest 

guestbook.py

 import os import urllib from google.appengine.api import users from google.appengine.ext import ndb import jinja2 import webapp2 JINJA_ENVIRONMENT = jinja2.Environment( loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), extensions=['jinja2.ext.autoescape'], autoescape=True) MAIN_PAGE_FOOTER_TEMPLATE = """\  

Guestbook name: https://stackoverflow.com/questions/24146593/gae-python-static-files-not-loading-in-localhost-but-load-perfectly-fine-when/%s """ DEFAULT_GUESTBOOK_NAME = 'default_guestbook' # We set a parent key on the 'Greetings' to ensure that they are all in the same # entity group. Queries across the single entity group will be consistent. # However, the write rate should be limited to ~1/second. def guestbook_key(guestbook_name=DEFAULT_GUESTBOOK_NAME): """Constructs a Datastore key for a Guestbook entity with guestbook_name.""" return ndb.Key('Guestbook', guestbook_name) class Greeting(ndb.Model): """Models an individual Guestbook entry.""" author = ndb.UserProperty() content = ndb.StringProperty(indexed=False) date = ndb.DateTimeProperty(auto_now_add=True) class MainPage(webapp2.RequestHandler): def get(self): guestbook_name = self.request.get('guestbook_name', DEFAULT_GUESTBOOK_NAME) greetings_query = Greeting.query( ancestor=guestbook_key(guestbook_name)).order(-Greeting.date) greetings = greetings_query.fetch(10) if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' template_values = { 'greetings': greetings, 'guestbook_name': urllib.quote_plus(guestbook_name), 'url': url, 'url_linktext': url_linktext, } template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values)) class Guestbook(webapp2.RequestHandler): def post(self): # We set the same parent key on the 'Greeting' to ensure each Greeting # is in the same entity group. Queries across the single entity group # will be consistent. However, the write rate to a single entity group # should be limited to ~1/second. guestbook_name = self.request.get('guestbook_name', DEFAULT_GUESTBOOK_NAME) greeting = Greeting(parent=guestbook_key(guestbook_name)) if users.get_current_user(): greeting.author = users.get_current_user() greeting.content = self.request.get('content') greeting.put() query_params = {'guestbook_name': guestbook_name} self.redirect('/?' + urllib.urlencode(query_params)) application = webapp2.WSGIApplication([ ('/', MainPage), ('/sign', Guestbook), ], debug=True)

index.html

  {% autoescape true %}      {% for greeting in greetings %} {% if greeting.author %} {{ greeting.author.nickname() }} wrote: {% else %} An anonymous person wrote: {% endif %} 
{{ greeting.content }}
{% endfor %}

Guestbook name: {{ url_linktext }} {% endautoescape %}

index.yaml

índices:

 # AUTOGENERATED # This index.yaml is automatically updated whenever the dev_appserver # detects that a new type of query is run. If you want to manage the # index.yaml file manually, remove the above marker line (the line # saying "# AUTOGENERATED"). If you want to manage some indexes # manually, move them above the marker line. The index.yaml file is # automatically uploaded to the admin console when you next deploy # your application using appcfg.py. - kind: Greeting ancestor: yes properties: - name: date direction: desc 

Dentro de la subcarpeta “hojas de estilo”, main.css

 body { font-family: Verdana, Helvetica, sans-serif; background-color: #DDDDDD; } 

¡Gracias!

Por favor cámbialo:

 - url: /stylesheets static_dir: stylesheets 

con:

 - url: /(.*\.css) static_files: static/\1 upload: static/.*\.css 

Espero que funcione para ti como funciona para mi

Creo que este es un error en GAE para Windows, donde, al adivinar el tipo MIME del archivo estático, establece el tipo MIME en el encabezado como una cadena Python Unicode, generando un error 500 en el controlador del archivo estático.

Vea las siguientes preguntas recientes:

Google App Engine: no servirá activos estáticos con el siguiente error:

Los archivos CSS no funcionan en localhost

Por favor, informe en el rastreador de errores GAE.