2013-03-15 15 views
6

Sto scrivendo una webapp di Google App Engine che restituisce alcuni html a un modello Django. Voglio renderizzare il modello usando un file o solo un po 'di codice che è molto simile a quello nel file. È possibile utilizzare Django per renderlo in un file letto e memorizzato nel database? Il vecchioAPI.HTML è solo una vecchia versione di api.html ma con alcune piccole modifiche. Il rendering di Django nel file api-html funziona correttamente.come eseguire il rendering del template django dal codice anziché dal file

Capisco che non è possibile archiviare file su GAE, come posso utilizzare dinamicamente Django per eseguire il rendering su HTML archiviato in memoria?

path = "" 
oldAPI = APIVersion().get_by_key_name(version) 
if oldAPI is None: 
    path = os.path.join(os.path.dirname(__file__), "api.html") 
template_values = { 
      'responseDict': responseDict, 
      } 
     if path: 
      self.response.out.write(template.render(path, template_values)) 
     else: 
      self.response.out.write(template.render(oldAPI.html,template_values)) 
+3

è possibile memorizzare i file nella blobstore http://stackoverflow.com/questions/81451/upload-files-in-google-app-engine –

+0

Sì, ma poi dovrò fare un modello dal file letto. Come? – hakonbogen

risposta

4

Al fine di rendere un modello 'a memoria', ci sono alcune cose che dovrete fare:

App Engine Setup

Prima di tutto, avrete bisogno per assicurarsi che tutto è impostato correttamente per Django. C'è un sacco di informazioni on the Third-party libraries page, ma lo includerò qui a tuo vantaggio.

In main.py, o (qualunque sia il vostro gestore di script è), è necessario aggiungere le seguenti righe:

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

from google.appengine.dist import use_library 
use_library('django', '1.2') # Change to a different version as you like 

Non dimenticare di includere nel vostro djangoapp.yaml:

libraries: 
    - name: django 
     version: "1.2" 

Impostazione codice

In secondo luogo, è necessario creare un oggetto Template, come indicato nello Google App Engine template documentation. Per esempio:

from google.appengine.ext.webapp import template 

# Your code... 
template_string = "Hello World" 
my_template = template.Template(template_string) 

# `context` is optional, but will be useful! 
# `context` is what will contain any variables, etc. you use in the template 
rendered_output = template.render(context) 

# Now, do what you like with `rendered_output`! 
+0

Quando provo questo ho l'errore: AssertionError: le impostazioni non sono state configurate in questo thread. C'è qualche tipo di impostazione che ho bisogno di abilitare pure? – hakonbogen

+0

Potrebbe essere necessario creare un semplice file 'settings.py' nella stessa cartella di' app.yaml'. [Questo articolo] (https://developers.google.com/appengine/articles/django) ha un esempio di file 'settings.py' che puoi usare. Riconosco che l'articolo non è aggiornato, ma * che * le informazioni dovrebbero comunque essere pertinenti. – NT3RP

2

È possibile creare un'istanza di un modello dal testo in Django con appena template.Template(my_text).

+0

Ricevo l'errore AssertionError: le impostazioni non sono state configurate in questo thread quando tento di istanziare il temlate dal testo. Provato con html e template.Template ("ciao mondo") – hakonbogen

+0

Forse provi ad usare StringIO? –

+0

Qual'è la sintassi per usarlo? – hakonbogen