|
Posted on 2009-06-15 14:03 pts 阅读(965) 评论(0) 编辑 收藏 所属分类: Python
这里详细说明了在网页中嵌入chartdirector元素的两种方法
Django integration |
Posted by GMalla on Mar-02-2008 23:28 |
|
Hi,
I'm using Django framework for my web
application. How do i integrate chart director with Django custom
views. In Django views define context and the context is passed to a
html template. Html template creates output html file. My question is
how to I pass a parameter to <IMG SRC="/home/simplebar.py"> .
Because in Django the URLs do not end with .py extension. This again
need to be mapped to a view function. I'm bit confuse.
Please help.
Thanks
GMalla |
Re: Django integration |
Posted by Peter Kwan on Mar-03-2008 13:31 |
|
Hi GMalla,
I have never used Django before. However, I have seen many frameworks, so I may provide some general ideas.
There are two methods to output a chart in a web page.
(1) Create the chart as an image file, then output the image file. For example, if you are using the sample code in "pythondemo/simplebar.py"
(*not* the CGI one), it is creating the chart as a file
"simplebar.png". So after crreating the chart, in your <IMG> tag,
you may use <IMG SRC="/path/to/simplebar.png">.
If you use this method, the followings are several important things to note:
- To avoid confusion, you should use the full path name, not a relative path name. Some web
frameworks will use some strange directory as the "current working
directory", and your relative path name may end up relative to some
strange place.
- Please be aware the path in the "makeChart"
call is a file system path name, not a URL path. For example,
"/aaa,png" means storing "aaa.png" in the root of the hard disk, not
the root of your web directory. (Of course, the <IMG> tag path is a URL, as per HTML standard.)
- Make sure your web server has read and write access to the directory. By default, the web
server, usually running as the anonymous user, may not write to the
hard disk. For testing, you may want to set the directory to be
readable and writable to anyone.
- The sample code uses a hard coded file name "simplebar.png". For a web
server, you may want to use a unique file name, otherwise two users
accessing the server at the same time will overwrite each other's
files. The BaseChart.makeTmpFile method in ChartDirector may be useful
for this purpose.
(2) Another method is to create the chart as an image in memory, then stream the image to the browser. Most well-developed web framework supports streaming of non-HTML content, such as images, movies, etc.. In the "pythondemo_cgi/simplebar.py" sample code, the following method is used to stream the content to the browser:
print "Content-type: image/png\n"
binaryPrint(c.makeChart2(PNG))
For
your Django framework, you may need to read the Django documentation,
or post questions to Django support or Django forum to ask if Django
can stream non-HTML content. If it can, then you may replace the above
two lines with the Django streaming code. In this case, the <IMG>
tag is <IMG SRC="/path/to/yourDjangoCode.xxx"> where
yourDjangoCode.xxx is the Django code that creates the chart and
streams it to the browser.
If Django does not support non-HTML content, then you must use method (1) above.
Hope this can help.
Regards
Peter Kwan |
Re: Django integration |
Posted by Adrian on Mar-24-2008 09:28 |
|
A quick Django integration:
1) Add your URL pattern:
url(r'^test.png$', views.test, name='url_chart_test'),
2) create your view function:
from django.http import *
from pychartdir import *
def test(request):
data = [85, 156, 179.5, 211, 123]
labels = ["Mon", "Tue", "Wed", "Thu", "Fri"]
c = XYChart(250, 250)
c.setPlotArea(30, 20, 200, 200)
c.addBarLayer(data)
c.addBarLayer(data)
response = HttpResponse( mimetype='image/png')
response.write(c.makeChart2(PNG))
return response
3) in your html page, add a link to this "image"
<img src="/whatever/test.png"> |
|