Hi Yongzhi,

I have the feeling that you're trying to send the whole function into the 
template, I'd rather send only the results since it's best to execute all the 
code you can in you web.py controller. Here's a minimalist example that works 
here and seems good for your need:

====================== web.py main file ===================
#!/usr/bin/python
# -*- coding: utf-8 -*-

import web

urls = (
    '.*', 'hello'
)
app = web.application(urls, globals())

render = web.template.render('templates')

def get_values():
    return {'sensor1': 5,
            'sensor2': 10,
            'freespace': 453083058}

class hello:        
    def GET(self):
        values = get_values()
        return render.test(values = values)

if __name__ == "__main__":
    app.run()
===========================================================

===============templates/test.html====================
$def with (values)
Hello reader, this is a test !<br/>
<br/>
sensor 1 : $values['sensor1']<br/>
sensor 2 : $values['sensor2']<br/>
free space: $values['freespace']<br/>
======================================================

I get the following result in my browser:
Hello reader, this is a test !

sensor 1 : 5
sensor 2 : 10
free space: 453083058

The function get_values() returns a dictionary containing all the values you 
want into an associative array ( {key: value} ). This way seems convenient 
with your question about sending seamlessly multiple values in your template 
considering you'll always be able to pack new values unless you give them 
another key in the dictionary.
Notice that I sent the result of the function (assigned into the values 
object) but not the function itself. The values are calculated into the web.py 
class then sent to the template.

In my example I give a complete dictionary at once but there are several ways 
to build dictionaries. If you get values one by one, the most affordable 
method might be to start with an empty one and to add the values when you get 
them:

sample_dict = {}
sample_dict['data_1'] = foo_function()
sample_dict['data_2'] = bar_function()

the resulting dictionary will be somewhat like this one:
{'data_1': 'whatever foo_function() returned',
 'data_2': 'whatever bar_function() returned'}

You'll be able to get the values in the dictionary by referencing them in your 
template like this $sample_dict['data_1'].

More informations about dict can be found in the python documentation.
https://docs.python.org/2/library/stdtypes.html section 5.8
https://docs.python.org/2/tutorial/datastructures.html section 5.5

Hope this example helps :)

Regards,

Christophe.


Le lundi 13 juillet 2015, 16:10:09 [email protected] a écrit :
> Hi all,
> 
> I want to display/update several metrics in a normal page (not in a form).
> These metrics got updated every minute and were stored in a log file. I
> prepared a function to open that log file then analyze the last several
> lines to collect them. I want these metrics got updated in every page
> load/refresh.
> 
> The first method I considered is to utilize Templetor (
> http://webpy.org/docs/0.3/templetor).  I used $code block in the template
> but figured out soon that this solution won't work for the security reason.
> In my function I use open which is prohibited by webpy.
> 
> Then I thought of `Import functions into templates` (
> https://github.com/webpy/webpy.github.com/blob/master/cookbook/template_impo
> rt.md). In my case, there is no argument for that function. I followed the
> instruction but got the following error.
> 
> checknow() takes no arguments (1 given)
> 
> 
> #in my application.py:
> def checknow():
> ...
>     return TN_str
> 
> render = web.template.render('templates/',globals={'stat':checknow})
> 
> #in the template:
> $def with(checknow)
> ... ...
>     <h1><div>Test: $stat(checknow)</div></h1>
> 
> By the way, how to refer multiple values of the function checknow()? The
> function checknow() should return multiple values in the real case. Could
> you please help me out? Thanks a lot.
> 
> Best Regards,
> -Yongzhi

-- 
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/webpy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to