Phil
Phil

Reputation: 3746

template.render() Google App Engine (python)

I'm using the webapp framework from google for this. I'm using template.render() in a get method to render a template for me.

I'm using the following code to do this for me

path = os.path.join(os.path.dirname(__file__), file_name)
self.response.out.write(template.render(path, template_values))

Where file_name is the template to render and template_values is a dict() containing any values to be rendered. What if I don't have any values that I want rendered. Do I just pass in an empty dict() object? It doesn't seem like a great solution to me. Should I be using template.load() instead?

(I can't find the docs for the template class over on google app engine either, hence I'm asking.)

Upvotes: 2

Views: 5768

Answers (4)

Phil
Phil

Reputation: 3746

Okay, thanks for all the answers.

What I've done is:

def render_template(template_name, template_values=dict()):
   path = os.path.join(os.path.dirname(__file__), template_name)
   self.response.out.write(template.render(path, template_values))

Which seems to be the most pythonic solution I could come up with.

Upvotes: 4

Nick Johnson
Nick Johnson

Reputation: 101149

If you have no template variables to pass in, just pass an empty dictionary. If you do use any variables in the template, they will all evaluate as None.

To make this easier, you could modify your helper code:

def render_template(template_name, template_values = None):
  if template_values is None:
    template_values = {}
  path = os.path.join(os.path.dirname(__file__), template_name)
  self.response.out.write(template.render(path, template_values))

Upvotes: 1

mcotton
mcotton

Reputation: 844

You can pass an empty dictionary to it and it doesn't mind. You just have to send it something. Your templates just won't display anything.

template_values = {}

path = os.path.join(os.path.dirname(__file__), file_name)
self.response.out.write(template.render(path, template_values))

Upvotes: 5

Adam Crossland
Adam Crossland

Reputation: 14213

Since you are rendering a Django template, you need to use render, and you probably can't provide an empty dictionary, as it will complain about not being able to find the variables it expects, unless you enclose each variable reference in an {% if %} block. You should provide a dictionary with all of the keys that the template expects but with empty strings as values.

Upvotes: 1

Related Questions