के साथ संबंधित यूआरएल मैं Google App Engine के साथ Jinja2 का उपयोग करता हूं। मैं अपने edit.html टेम्पलेट के साथ base.html लोड करने के लिए एक सापेक्ष पथ का उपयोग करने की कोशिश कर रहा हूं।Google App Engine और Jinja2
मेरे विषय निर्देशिका संरचना इस तरह दिखता है ...
- आवेदन जड़
- विषयों
- डिफ़ॉल्ट
- व्यवस्थापक
- edit.html
- base.html
- व्यवस्थापक
- डिफ़ॉल्ट
- विषयों
मैं टेम्पलेट में इस की कोशिश की है ...
{% extends "../base.html" %}
जो इस रिटर्न ...
TemplateNotFound: ../base.html
जब मैं वें करता हूं है ...
{% extends "base.html" %}
मेरा संपादन.html टेम्पलेट लोड, लेकिन base.html के बिना।
मैं base.html का उपयोग कैसे करूं जो एक निर्देशिका है edit.html से वापस है?
अब कोड के लिए ...
app.yaml
application: myblog
version: 1
runtime: python27
api_version: 1
threadsafe: no
handlers:
- url: /admin/.*
script: admin.app
login: admin
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
script: static.app
builtins:
- remote_api: on
libraries:
- name: webapp2
version: "2.5.1"
- name: jinja2
version: latest
config.py
blog_name = 'My Blog'
theme = 'default'
post_path_format = '/%(year)d/%(month)02d/%(slug)s'
admin.py
def render_template(template_name, template_vals=None, theme=None):
template_path = os.path.join(os.path.dirname(__file__),
'themes', theme or config.theme)
env = jinja2.Environment(loader=jinja2.FileSystemLoader(template_path))
template = env.get_template(template_name)
return template.render(**(template_vals or {}))
class BlogPost(db.Model):
#The URL path to the blog post. Posts have a path if they are published.
path = db.StringProperty()
title = db.StringProperty(required=True, indexed=False)
body = db.TextProperty(required=True)
published = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
def render(self):
template_vals = {
'config': config,
'post': self,
}
return render_template("post.html", template_vals)
form = model_form(BlogPost, Form)
class PostForm(form):
pass
class PostHandler(webapp2.RequestHandler):
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def render_to_response(
self, template_name, template_vals=None, theme=None):
template_name = os.path.join("admin", template_name)
self.response.out.write(render_template(
template_name, template_vals, theme))
def render_form(self, form):
self.render_to_response("edit.html", {'form': form})
def get(self):
self.render_form(PostForm())
app = webapp2.WSGIApplication([('/admin/newpost', PostHandler)],
debug=True)
edit.html
{% extends "../base.html" %}
{% block title %}Testing New Post Template{% endblock %}
{% block body %}
<form method="post" action="">
<table>
<div>{{ form.title.label }}: {{ form.title(class="css_class") }}</div>
{% if form.title.errors %}
<ul class="errors">{% for error in form.name.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
<div>{{ form.body.label }}: {{ form.body() }}</div>
{% if form.body.errors %}
<ul class="errors">{% for error in form.body.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
</table>
<input type="submit" />
</form>
{% endblock %}
पूर्ण स्टैक ट्रेस
ERROR 2012-09-07 07:45:42,964 webapp2.py:1553] ../base.html
Traceback (most recent call last):
File "/home/john/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "/home/john/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "/home/john/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/john/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/home/john/google_projects/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/home/john/google_projects/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/home/john/google_projects/sprucepress/admin.py", line 86, in get
self.render_form(PostForm())
File "/home/john/google_projects/sprucepress/admin.py", line 83, in render_form
self.render_to_response("edit.html", {'form': form})
File "/home/john/google_projects/sprucepress/admin.py", line 80, in render_to_response
template_name, template_vals, theme))
File "/home/john/google_projects/sprucepress/admin.py", line 34, in render_template
return template.render(**(template_vals or {}))
File "/home/john/google_projects/google_appengine/lib/jinja2/jinja2/environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "/home/john/google_projects/sprucepress/themes/default/admin/edit.html", line 1, in top-level template code
{% extends "../base.html" %}
TemplateNotFound: ../base.html
क्या होता है यदि आप '{% विस्तारित करता है" थीम/डिफ़ॉल्ट/base.html "%}'? –
एक ही त्रुटि है, लेकिन साथ "TemplateNotFound: विषयों/डिफ़ॉल्ट/base.html" – jwogrady
या '', अन्य {% "डिफ़ॉल्ट/base.html"% फैली} तो है कि मुझे यकीन है कि कैसे आप टेम्पलेट निर्दिष्ट कर सकते हैं नहीं कर रहा हूँ। मुझे विश्वास नहीं है कि आप 'विस्तार' के साथ सापेक्ष पथ का उपयोग कर सकते हैं, लेकिन मैं गलत हो सकता हूं। आप [webapp2_extra/jinja2] (http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html) में भी देख सकते हैं) हो सकता है कि स्रोत इस मुद्दे पर कुछ प्रकाश डाल सके। –