Note that there are some explanatory texts on larger screens.

plurals
  1. POwebapp2 + jinja2: How can i get uri_for() working in jinja2-views
    primarykey
    data
    text
    <p>How can i add pass Model-Specific urls to the Template. Let's say, i want to build an edit-link. I would guess, using the uri_for() function would be an easy approach.</p> <p>But the following gives me "UndefinedError: 'webapp2' is undefined"</p> <pre><code>{% webapp2.uri_for("editGreeting", greeting.key().id()) %} </code></pre> <p>Or should i prepare these in the MainPage-Request-Handler? If so, i don't know how to add them to each greeting.</p> <p>The following Code-Example is taken from: <a href="http://webapp-improved.appspot.com/tutorials/gettingstarted/templates.html">http://webapp-improved.appspot.com/tutorials/gettingstarted/templates.html</a></p> <p>Controller/Handler</p> <pre><code>class MainPage(webapp2.RequestHandler): def get(self): guestbook_name=self.request.get('guestbook_name') greetings_query = Greeting.all().ancestor( guestbook_key(guestbook_name)).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)) </code></pre> <p>Template/View:</p> <pre><code>&lt;html&gt; &lt;body&gt; {% for greeting in greetings %} {% if greeting.author %} &lt;b&gt;{{ greeting.author.nickname }}&lt;/b&gt; wrote: {% else %} An anonymous person wrote: {% endif %} &lt;blockquote&gt;{{ greeting.content|escape }}&lt;/blockquote&gt; {% endfor %} &lt;form action="/sign" method="post"&gt; &lt;div&gt;&lt;textarea name="content" rows="3" cols="60"&gt;&lt;/textarea&gt;&lt;/div&gt; &lt;div&gt;&lt;input type="submit" value="Sign Guestbook"&gt;&lt;/div&gt; &lt;/form&gt; &lt;a href="{{ url }}"&gt;{{ url_linktext }}&lt;/a&gt; &lt;/body&gt; &lt;/html </code></pre> <p>The class BaseHandler is the class all handlers inherit from. I tried the following as @moraes suggested. I still get: </p> <pre><code>value = self.func(obj) File "C:\Users\timme04\python\hellowebapp\handlers\basehandler.py", line 23, in jinja2 return jinja2.get_jinja2(factory=self.jinja2_factory) File "C:\Users\timme04\python\hellowebapp\webapp2_extras\jinja2.py", line 212, in get_jinja2 jinja2 = app.registry[key] = factory(app) TypeError: jinja2_factory() takes exactly 1 argument (2 given) </code></pre> <p>:(</p> <pre><code>import webapp2 from webapp2_extras import jinja2 class BaseHandler(webapp2.RequestHandler): def jinja2_factory(app): j = jinja2.Jinja2(app) j.environment.filters.update({ # Set filters. # ... }) j.environment.globals.update({ # Set global variables. 'uri_for': webapp2.uri_for, # ... }) return j @webapp2.cached_property def jinja2(self): # Returns a Jinja2 renderer cached in the app registry. return jinja2.get_jinja2(factory=self.jinja2_factory) def render_response(self, _template, **context): # Renders a template and writes the result to the response. rv = self.jinja2.render_template(_template, **context) self.response.write(rv) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload