<img src="{{=URL(r=request,f='../matplotlib/simple')}}" />
should be
<img src="{{=URL(r=request,c='matplotlib',f='simple')}}" />
the view simple.html is not used because simple() returns a string
(the page body, the image) and not a dictionary.
Massimo
On Dec 17, 9:23 am, aus <[email protected]> wrote:
> also, if I openhttp://127.0.0.1:8000/test/matplotlib/simple
> being simple() the function that provides the PNG data,
> the view matplotlib/simple.html does not seem to be used at all: the
> browser only show the figure, without any other element or formatting
> from matplotlib/simple.html: is that an intended behavior or am I
> again missing something?
>
> thanks!
> aus
>
> On Dec 17, 4:09 pm, aus <[email protected]> wrote:
>
> > ok... I'm slowing getting there...
>
> > now, I've got a file "test/views/testfigure/index.html" where I have
> > {{extend 'layout.html'}}
> > <h1>This is the testfigure/index.html template</h1>
> > <img src="{{=URL(r=request,f='../matplotlib/simple')}}" />
> > <img src="{{=URL(r=request,f='simple')}}" />
>
> > and a file "test/controllers/matplotlib.py" that provided the PNG
> > stream
>
> > <img src="{{=URL(r=request,f='../matplotlib/simple')}}" /> works fine,
> > but
> > <img src="{{=URL(r=request,f='simple')}}" /> does not
> > Is it a good practice to use a relative path or am I missing anything?
>
> > thanks!
> > aus
>
> > On Dec 17, 3:45 pm, mdipierro <[email protected]> wrote:
>
> > > consider the previous example with mathplotlib:
>
> > > def simple(): ..... return stream.getvalue()
>
> > > now from a template you can do
>
> > > <img src="{{=URL(r=request,f='simple')}}" />
>
> > > and this will include the image returned by the simple() action.
>
> > > Massimo
>
> > > On Dec 17, 8:38 am, aus <[email protected]> wrote:
>
> > > > is there any example for doing that? I just cannot figure out how to
> > > > call a python function (action) from a template...
>
> > > > thanks!
> > > > aus
>
> > > > On Dec 17, 7:31 am, mdipierro <[email protected]> wrote:
>
> > > > > <img src="{{=embed64(data=imagebinarydata)}}" />
>
> > > > > will work (not on IE).
>
> > > > > Be aware that nobody ever does this. Nobody ever embeds images in
> > > > > HTML. Although it is cool in come cases.
> > > > > People normally just have source point to the action that generates
> > > > > the PNG.
>
> > > > > Massimo
>
> > > > > On Dec 16, 6:43 pm, aus <[email protected]> wrote:
>
> > > > > > here I am again...
> > > > > > I fell like a moron, but I just cannot have it work...
>
> > > > > > so, the last line of the controller is:
> > > > > > return dict(imagebinarydata=stream.getvalue())
>
> > > > > > and this is the corresponding view:
> > > > > > {{extend 'layout.html'}}
> > > > > > <h1>This is the matplotlib/simple.html template</h1>
> > > > > > <img src="{{=embed64(data = {{=imagebinarydata}} ) }}" />
>
> > > > > > unfortunately the syntax is wrong:
>
> > > > > > response.write(embed64(data = {{=imagebinarydata)
> > > > > > ^
> > > > > > SyntaxError: invalid syntax
>
> > > > > > and I don't quite understand why.
> > > > > > Is it also necessary to include extension='image/png' in the call to
> > > > > > embed64?
>
> > > > > > Thanks!
>
> > > > > > Cheers,
> > > > > > aus
>
> > > > > > On Dec 17, 1:02 am, aus <[email protected]> wrote:
>
> > > > > > > Thank you, Massimo!
> > > > > > > Sorry for the multiple posts... I didn't mean it :)
>
> > > > > > > cheers,
> > > > > > > ale
>
> > > > > > > On Dec 16, 7:26 pm, mdipierro <[email protected]> wrote:
>
> > > > > > > > You have to do it the old fashion way
>
> > > > > > > > <img src="url_to_the_png_action" />
>
> > > > > > > > web2py allows you to do
>
> > > > > > > > <img src="{{=embed64(data='imagebinarydata')}}" /> but this is
> > > > > > > > not
> > > > > > > > supported by IE.
>
> > > > > > > > Massimo
>
> > > > > > > > On Dec 16, 11:59 am, aus <[email protected]> wrote:
>
> > > > > > > > > now the question is how to place the figure in a variable to
> > > > > > > > > be used
> > > > > > > > > in a template. What's the best way of doing that? Should I
> > > > > > > > > pack the
> > > > > > > > > stream into a dict? How should the view look like?
>
> > > > > > > > > thanks!
> > > > > > > > > aus
>
> > > > > > > > > On Dec 16, 5:27 pm, aus <[email protected]> wrote:
>
> > > > > > > > > > ok, I found it, I mistyped 'Content-Type', my fault
>
> > > > > > > > > > thanks!
> > > > > > > > > > aus
>
> > > > > > > > > > On Dec 16, 5:04 pm, aus <[email protected]>
> > > > > > > > > > wrote:
>
> > > > > > > > > > > ok, it works, but firefox displays the raw data, not a
> > > > > > > > > > > figure. I guess
> > > > > > > > > > > I need an appropriate view for that, am I right?
>
> > > > > > > > > > > Cheers
> > > > > > > > > > > aus
>
> > > > > > > > > > > On Dec 16, 4:56 pm, mdipierro <[email protected]>
> > > > > > > > > > > wrote:
>
> > > > > > > > > > > > response.header['content-type']='image/png'
>
> > > > > > > > > > > > should have been
>
> > > > > > > > > > > > response.headers['Content-Type']='image/png'
>
> > > > > > > > > > > > Massimo
>
> > > > > > > > > > > > On Dec 16, 9:48 am, aus <[email protected]>
> > > > > > > > > > > > wrote:
>
> > > > > > > > > > > > > Hi Massimo,
>
> > > > > > > > > > > > > thank you for the *really* prompt reply!
> > > > > > > > > > > > > I managed to have Dojox charts work, but I'm getting
> > > > > > > > > > > > > a error message
> > > > > > > > > > > > > form the "matplotlib" code (btw, "import datetime"
> > > > > > > > > > > > > was missing). I
> > > > > > > > > > > > > pasted the Dojo code at the bottom of this email,
> > > > > > > > > > > > > just in case I'm not
> > > > > > > > > > > > > the only beginner around :)
>
> > > > > > > > > > > > > Traceback (most recent call last):
> > > > > > > > > > > > > File
> > > > > > > > > > > > > "/home/aus/Software/Web2py/web2py/gluon/restricted.py",
> > > > > > > > > > > > > line
> > > > > > > > > > > > > 62, in restricted
> > > > > > > > > > > > > exec ccode in environment
> > > > > > > > > > > > > File
> > > > > > > > > > > > > "/home/aus/Software/Web2py/web2py/applications/test/controllers/
> > > > > > > > > > > > > matplotlib.py", line 29, in <module>
> > > > > > > > > > > > > File
> > > > > > > > > > > > > "/home/aus/Software/Web2py/web2py/gluon/globals.py",
> > > > > > > > > > > > > line 55,
> > > > > > > > > > > > > in <lambda>
> > > > > > > > > > > > > self._caller=lambda f: f()
> > > > > > > > > > > > > File
> > > > > > > > > > > > > "/home/aus/Software/Web2py/web2py/applications/test/controllers/
> > > > > > > > > > > > > matplotlib.py", line 23, in simple
> > > > > > > > > > > > > response.header['content-type']='image/png'
> > > > > > > > > > > > > TypeError: 'NoneType' object does not support item
> > > > > > > > > > > > > assignment
>
> > > > > > > > > > > > > what's wrong with the response?
>
> > > > > > > > > > > > > thank you once again!
>
> > > > > > > > > > > > > Cheers,
> > > > > > > > > > > > > aus
>
> > > > > > > > > > > > > Dojo / Dojox charting / JSON example:
>
> > > > > > > > > > > > > <script type="text/javascript">
>
> > > > > > > > > > > > > dojo.require("dojox.charting.Chart2D");
> > > > > > > > > > > > > {{import gluon.contrib.simplejson as sj}}
>
> > > > > > > > > > > > > function plott(){
> > > > > > > > > > > > > //var dd = dojox.json.ref.fromJson(data);
> > > > > > > > > > > > > //var data = [1,3,2,4,3,6];
> > > > > > > > > > > > > console.debug({{=sj.dumps(data)}});
> > > > > > > > > > > > > var chart1 = new
> > > > > > > > > > > > > dojox.charting.Chart2D("simplechart");
> > > > > > > > > > > > > chart1.addPlot("default", {type: "Lines"});
> > > > > > > > > > > > > chart1.addAxis("x");
> > > > > > > > > > > > > chart1.addAxis("y", {vertical: true});
> > > > > > > > > > > > > chart1.addSeries("Series 1", {{=sj.dumps(data)}});
> > > > > > > > > > > > > chart1.render();};
>
> > > > > > > > > > > > > dojo.addOnLoad(plott);
>
> > > > > > > > > > > > > </script>
>
> > > > > > > > > > > > > On Dec 16, 3:49 pm, mdipierro
> > > > > > > > > > > > > <[email protected]> wrote:
>
> > > > > > > > > > > > > > In web2py+matplotlib:
>
> > > > > > > > > > > > > > def simple():
> > > > > > > > > > > > > > import random, cStringIO
>
> > > > > > > > > > > > > > from matplotlib.backends.backend_agg import
> > > > > > > > > > > > > > FigureCanvasAgg as
> > > > > > > > > > > > > > FigureCanvas
> > > > > > > > > > > > > > from matplotlib.figure import Figure
> > > > > > > > > > > > > > from matplotlib.dates import DateFormatter
>
> > > > > > > > > > > > > > fig=Figure()
> > > > > > > > > > > > > > ax=fig.add_subplot(111)
> > > > > > > > > > > > > > x=[]
> > > > > > > > > > > > > > y=[]
> > > > > > > > > > > > > > now=datetime.datetime.now()
> > > > > > > > > > > > > > delta=datetime.timedelta(days=1)
> > > > > > > > > > > > > > for i in range(10):
> > > > > > > > > > > > > > x.append(now)
> > > > > > > > > > > > > > now+=delta
> > > > > > > > > > > > > > y.append(random.randint(0, 1000))
> > > > > > > > > > > > > > ax.plot_date(x, y, '-')
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
> > > > > > > > > > > > > > fig.autofmt_xdate()
> > > > > > > > > > > > > > canvas=FigureCanvas(fig)
> > > > > > > > > > > > > > response.header['content-type']='image/png'
> > > > > > > > > > > > > > stream=cStringIO.StringIO()
> > > > > > > > > > > > > > canvas.print_png(stream)
> > > > > > > > > > > > > > return stream.getvalue()
>
> > > > > > > > > > > > > > Massimo
>
> > > > > > > > > > > > > > On Dec 16, 6:12 am, aus
> > > > > > > > > > > > > > <[email protected]> wrote:
>
> > > > > > > > > > > > > > > Hi Massimo,
>
> > > > > > > > > > > > > > > thank you for your reply. Your suggestion does
> > > > > > > > > > > > > > > not seem to work, but
> > > > > > > > > > > > > > > maybe I'm not using Dojo properly. How would you
> > > > > > > > > > > > > > > code the plot with
> > > > > > > > > > > > > > > flot?
>
> > > > > > > > > > > > > > > Also, it would be great to be able to embed
> > > > > > > > > > > > > > > images/charts generated by
> > > > > > > > > > > > > > > matplotlib, similarly to what can be done with
> > > > > > > > > > > > > > > django:http://www.scipy.org/Cookbook/Matplotlib/Django.
> > > > > > > > > > > > > > > Is there a similar
> > > > > > > > > > > > > > > feature in web2py?
>
> > > > > > > > > > > > > > > Thank you!
>
> > > > > > > > > > > > > > > Cheers,
> > > > > > > > > > > > > > > aus
>
> > > > > > > > > > > > > > > On Dec 16, 6:57 am, mdipierro
> > > > > > > > > > > > > > > <[email protected]> wrote:
>
> > > > > > > > > > > > > > > > I do not know
>
> ...
>
> read more ยป
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---