I’m using google appengine (python, of course 🙂 ) and I’d like to do a string.replace on a string from the template file.
{% for item in items %}
<p>{{ item.code.replace( '_', ' ' ) }}</p>
{% endfor %}
But that isn’t working. So we cannot execute anything other than basic checks in the app engine templates. Is that Correct ?
Another related problem is I’m trying to shorten a string and make it available to the template.
Each furniture object has a name and a longer description field. In this view I’m rendering, I want only the first 50 characters of the description field.
So I tried something like
items = db.GqlQuery( 'select * from furniture' )
# edit: if you change the above line to
# items = db.GqlQuery( 'select * from furniture' ).fetch( 1000 )
# the .fetch() command makes the addition of dynamic properties work!
for item in items :
item.shortdescr = item.description[ 0:50 ]
# pass data off to template for rendering
self.response.out.write(
template.render( 'furnitureAll.html', { 'items' : items } )
)
Template goes
{% for item in items %}
<p>{{ item.name }}</p>
<p>{{ item.shortdescr }}</p>
<!-- items.shortdescr does not exist here,
probably because I did not .put() it previously. -->
{% endfor %}
Since that didn’t work, I tried changing the Gql Query to shorten the string instead. But I’m quickly realizing Gql isn’t like SQL. I’m trying to write queries like
select name,LEFT( description, 50 ) from furniture
With little success
I have little experience with Google AppEngine, but my understanding is that it is very closely related to Django. Your templates do not actually contain Python code, even if some of the structures you use in them look like it.
Both of your questions should be solved using template filters. If it was Django, I would use something like this for your second question:
For your first question (string replace), there may be no built-in filter you can use for that. You will need to write your own. Something like this;
Then, in your template, you can do this: