2013-03-15 18 views
6

Django şablonuna bazı html oluşturan bir Google App Engine webapp yazıyorum. Şablonu ya bir dosyayla ya da dosyadaki dosyaya çok benzeyen bir json kullanarak render etmek istiyorum. Django'yu, veritabanında okuyup saklanan bir dosyaya dönüştürmek mümkün mü? OldAPI.HTML, api.html'nin eski bir sürümü ancak bazı küçük değişikliklerle birlikte. Django'nun api-html dosyasına gönderilmesi iyi çalışıyor.django şablonunu dosya yerine koddan nasıl oluşturulacağını

Dosyaları GAE'de depolayamayacağınızı anlıyorum, bellekte depolanan HTML'yi oluşturmak için Django'yu dinamik olarak nasıl kullanabilirim?

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)) 
sadece template.Template(my_text) ile Django metinden bir şablon örneğini
+3

Sen Blobstore http://stackoverflow.com/questions/81451/upload-files-in-google-app-engine –

+0

Evet dosyaları saklayabilir, ama sonra yapmak gerekir: Örneğin okuma dosyasındaki bir Şablon. Nasıl? – hakonbogen

cevap

4

Django için doğru ayarlanmış. on the Third-party libraries page bir sürü bilgi var, ama ben sizin yararınıza buraya ekleyeceğim.

main.py yılında

, ya da (senaryonuz işleyicisi ne olursa olsun), aşağıdaki satırları ekleyin gerekir:

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 

yılında django eklemeyi unutmayın sizin app.yaml:

libraries: 
    - name: django 
     version: "1.2" 

Kod Ayarları

'de gösterildiği gibi, Template nesnesi oluşturmanız gerekir..

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

Bunu denediğimde hatayı alıyorum: AssertionError: ayarlar bu iş parçacığında yapılandırılmamış. Etkinleştirmem gereken bir çeşit ayar var mı? – hakonbogen

+0

"app.yaml" ile aynı klasörde basit bir 'settings.py' dosyası oluşturmanız gerekebilir. [Bu makale] (https://developers.google.com/appengine/articles/django) adresinde kullanabileceğiniz bir 'settings.py' dosyası örneği var. Makalenin güncelliğini yitirdiğimi biliyorum, ancak * bu bilgilerin hala alakalı olması gerekir. – NT3RP

2

.

+0

AssertionError alıyorum: Metinden tempiti başlatmaya çalıştığımda, ayarlar bu iş parçacığında yapılandırılmamış. Html ve template.Template ile çalıştı ("merhaba dünya") – hakonbogen

+0

Belki sadece StringIO kullanmayı deneyin? –

+0

Bunu kullanmak için sözdizimi nedir? – hakonbogen

0

Maalesef bunu yapmak için hiçbir (yerleşik) yolu var, ancak fonksiyon ya google.appengine.ext.webapp.template._load_internal_django (Python 2.7 ile GAE) google.appengine.ext.webapp.template._load_user_django (Python 2.5 ile GAE'nin) den esinlenerek ve kendi sarıcı ağır basan ayarlarını yaz ve alabilirsiniz GAE kaynağı gibi render yapar. Her şeyden

App Engine Kurulum

Öncelikle Her şeyin düzgün bir gerekecektir: 'bellekte' bir şablon, yapmanız gereken birkaç şey vardır işlemek amacıyla

İlgili konular