Google Code disponible en: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
El HTML insertado en el código es confuso y difícil de mantener. Es mejor utilizar un sistema de plantillas en el que el HTML se mantenga en un archivo independiente con una sintaxis especial para indicar dónde aparecerán los datos de la aplicación. Existen muchos sistemas de plantillas para Python: EZT, Cheetah, ClearSilver, Quixote y Django, entre otros muchos. Puedes utilizar el motor de plantillas que prefieras. Tan sólo has de asociarlo al código de tu aplicación.
Para tu comodidad, el módulo webapp incluye un motor de plantillas Django. Está incluido en el kit de desarrollo de software (SDK) y forma parte de App Engine, de forma que no es necesario vincularlo para utilizarlo.
Añade las siguientes instrucciones import en la parte superior de helloworld/helloworld.py:
import os from google.appengine.ext.webapp import template
Sustituye el controlador MainPage por código que se parezca al siguiente:
class MainPage(webapp.RequestHandler):
def get(self):
greetings_query = Greeting.all().order('-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,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
Finalmente, crea un nuevo archivo en el directorio helloworld denominado index.html, con el siguiente contenido:
<html>
<body>
{% for greeting in greetings %}
{% if greeting.author %}
<b>{{ greeting.author.nickname }}</b> wrote:
{% else %}
An anonymous person wrote:
{% endif %}
<blockquote>{{ greeting.content|escape }}</blockquote>
{% endfor %}
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
<a href="{{ url }}">{{ url_linktext }}</a>
</body>
</html>
Vuelve a cargar la página y haz una prueba.
template.render(path, template_values) sigue una ruta de archivo hasta el archivo de plantilla y un diccionario de valores y devuelve el texto mostrado. La plantilla utiliza la sintaxis de plantilla Django para acceder e iterar los valores y puede hacer referencia a las propiedades de dichos valores. En muchos casos, puedes incluir objetos modelo de almacén de datos directamente como valores y acceder a sus propiedades desde las plantillas.
Sugerencia: una aplicación App Engine dispone de acceso de sólo lectura a todos los archivos subidos con el proyecto, los módulos de biblioteca y no otros archivos. El directorio de trabajo actual es el directorio raíz de la aplicación, de forma que la ruta a index.html es simplemente "index.html".
Para obtener más información sobre el motor de plantillas Django, consulta la documentación de la plantilla Django 0.96.
Cada aplicación web devuelve HTML generado de forma dinámica a partir del código de la aplicación a través de plantillas o algún otro mecanismo. La mayor parte de las aplicaciones web también necesitan publicar contenido estático, como imágenes, hojas de estilo CSS o archivos JavaScript. Para una mayor eficiencia, App Engine trata los archivos estáticos de forma diferente a los archivos de datos y el código fuente de la aplicación. Puedes utilizar la función de archivos estáticos de App Engine para publicar una hoja de estilo CSS para esta aplicación.
Para continuar, consulta la sección Uso de archivos estáticos.