2013-03-15 18 views
6

Piszę aplikację webapp Engine Google App, która renderuje trochę html do szablonu Django. Chcę albo wyrenderować szablon przy użyciu pliku, albo tylko jsona bardzo podobnego do tego w pliku. Czy można użyć Django do renderowania pliku, który jest odczytywany i zapisywany w bazie danych? Stary plik API.HTML to stara wersja pliku api.html, ale z niewielkimi zmianami. Renderowanie Django do pliku api-html działa dobrze.jak renderować szablon django z kodu zamiast pliku

Rozumiem, że nie można przechowywać plików na GAE, w jaki sposób mogę dynamicznie używać Django do renderowania do HTML przechowywanego w pamięci?

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

można przechowywać pliki w Blobstore http://stackoverflow.com/questions/81451/upload-files-in-google-app-engine –

+0

Tak, ale wtedy będę musiał zrobić Szablon z pliku do odczytu. W jaki sposób? – hakonbogen

Odpowiedz

4

W celu uczynienia szablon „w pamięci”, istnieje kilka rzeczy, które trzeba zrobić:

App Konfiguracja silnika

Przede wszystkim musisz upewnić się, że wszystko jest poprawnie skonfigurowany dla Django. Jest wiele informacji: on the Third-party libraries page, ale uwzględnię to tutaj dla twojej korzyści.

W main.py lub (niezależnie od obsługi skrypt jest), musisz dodać następujące wiersze:

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 

Nie zapomnij podać django w swojej app.yaml:

libraries: 
    - name: django 
     version: "1.2" 

Ustawienia kodu

Po drugie, musisz utworzyć obiekt Template, oznaczony w Google App Engine template documentation. Na przykład:

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

Po wypróbowaniu tego otrzymuję komunikat o błędzie: AssertionError: ustawienia nie zostały skonfigurowane w tym wątku. Czy jest jakieś ustawienie, które również muszę włączyć? – hakonbogen

+0

Może być konieczne utworzenie prostego pliku 'settings.py' w tym samym folderze, co plik' app.yaml'. [Ten artykuł] (https://developers.google.com/appengine/articles/django) ma przykładowy plik 'settings.py', z którego możesz skorzystać. Rozumiem, że artykuł jest nieaktualny, ale * ta * informacja nadal powinna być istotna. – NT3RP

2

Można instancji szablonu z tekstem w Django z zaledwie template.Template(my_text).

+0

Otrzymuję AssertionError: ustawienia nie zostały skonfigurowane w tym wątku, gdy próbuję utworzyć wystąpienie tematu z tekstu. Próbowałem z html i template.Template ("hello world") – hakonbogen

+0

Może po prostu spróbuj użyć StringIO? –

+0

Co to za składnia? – hakonbogen