How to convert string to object?
Hi! Maybe this is more Python question, but because I'm using it with Zope, I'm posting it here. Let's suppose I have DTML Method called e.g. 'index_html' . It has one input parameter 'obj' which contains name of existing file object inside the directory tree. For example, the index_html file would be called as: www.mysite.com/path/index_html?obj=path.to.object.file Then in folder www.mysite.com/path/path/to/object/file in this example would be the DTML document I'd like to be displayed. I have to make proper code in the index_html file do do this. I tried do following in index_html: <dtml-var obj> But this echoes only plain text ('path.to.object.file') and not the object's content. I need to find some way how to convert this string to object, so Zope (or Python) can understand it as an object and display its content. Is there some way? Thanks a lot for any answer! -- Regards, Mirsoft
Lubos Culen wrote:
Let's suppose I have DTML Method called e.g. 'index_html' . It has one input parameter 'obj' which contains name of existing file object inside the directory tree. For example, the index_html file would be called as:
www.mysite.com/path/index_html?obj=path.to.object.file
Then in folder www.mysite.com/path/path/to/object/file in this example would be the DTML document I'd like to be displayed. I have to make proper code in the index_html file do do this.
I think you need to clarify why you want to do it. Because normally you wold just let zope do the path traversal for you. It certainly is doable, but you need a really good reason to roll your own version of something that Zope allready does. Most likely there is another way to acheive what you want to do. It seems like you are thinking as a sql database programmer. You don't have to do that in Zope. regards Max M
Lubos Culen wrote at 2003-3-6 15:49 +0100:
Let's suppose I have DTML Method called e.g. 'index_html' . It has one input parameter 'obj' which contains name of existing file object inside the directory tree. For example, the index_html file would be called as:
www.mysite.com/path/index_html?obj=path.to.object.file
Search for "restrictedTraverse"... Dieter
If your asking that question there is a possibility that you don't understand zope acquisition. Which is all right ... I think we all didn't get it at one point. I assume you want to use index_html as a template (or wrapper) for the content in some deeper folder? If so all you need to do (sorry this is in zpt ... don't use dtml much anymore)... in a zpt in your root folder .. <html> <body> <div> or table or what not containing whatever you want to appear before the "content" </div> <div tal:content="structure here/content"/> <div> or table or what not containing whatever you want to appear after the "content" </div> </body> </html> Now just create folders ... and stick a file (dtml or zpt or python script or whatever) called 'content' wherever you want it to appear. So if I had a folder layout like the following: /articles/linux/2003/03/07/01 I would put a zpt (or dtml document/method) called 'content' in the /articles/linux/2003/03/07/01 folder. And when I surfed to: http://server/articles/linux/2003/03/07/01 I would get the content file 'wrapped' with the index_html somewhere up the folder 'path'. You can further customize things by using macros and slots and all the zpt goodies. Plus if you ever need to 'override' your index_html file deeper in you folder 'tree' just create a new one at the highest level you want to start using it. Hope this helps On Thu, 2003-03-06 at 08:49, Lubos Culen wrote:
Hi!
Maybe this is more Python question, but because I'm using it with Zope, I'm posting it here.
Let's suppose I have DTML Method called e.g. 'index_html' . It has one input parameter 'obj' which contains name of existing file object inside the directory tree. For example, the index_html file would be called as:
www.mysite.com/path/index_html?obj=path.to.object.file
Then in folder www.mysite.com/path/path/to/object/file in this example would be the DTML document I'd like to be displayed. I have to make proper code in the index_html file do do this.
I tried do following in index_html:
<dtml-var obj>
But this echoes only plain text ('path.to.object.file') and not the object's content. I need to find some way how to convert this string to object, so Zope (or Python) can understand it as an object and display its content. Is there some way?
Thanks a lot for any answer! -- Edward Muller
Interlix - President Web Hosting - PC Service & Support Custom Programming - Network Service & Support Phone: 417-862-0573 Cell: 417-844-2435 Fax: 417-862-0572 http://www.interlix.com
Edward & all, thanks, this is definitely good idea how to create content based web-sites using ZPTs. I did my tests to create site structure, and it works fine, but I have few issues (maybe you will be able to help, if you are creating the sites this way?): - Let's say the "content" file inside the folders is my own object, inheritted from e.g. DTML document (so it has some additional properties like time and date, but in the base it's HTML). - Let's say when user clicks on some "EDIT" link (this link would be located outside content file of course, so it will be in ZPT's index_html), it should run some different method of the "content" object (which would for example open edit form - BUT inside the edit template). Do you have any ideas how to do this best way? This is how I solved it under your example (but I don't feel this would be Zope's standard way and I have few issues, see below): The EDIT and CONTENT located in ZPT index_html from your example I created like this: <html> <body> <div> or table or what not containing whatever you want to appear before the "content" <a href="content/editForm" tal:attributes="href string:${here/REQUEST/URL1}?edit_me=1" target="_blank">Edit</a> </div> <span tal:condition="not:exists:here/REQUEST/form/edit_me" tal:content="structure here/content"> <H2>Content area</H2> </span> <span tal:condition="exists:here/REQUEST/form/edit_me" tal:string="<iframe width=100% height=600 src=\"content/editForm\"></iframe>"> </span> <div> or table or what not containing whatever you want to appear after the "content" </div> </body> </html> It works somehow, but these are my issues: o) I had to use <IFRAME..> to create new "frame" editing instead of using 'tal:content="structure here/content/editForm"' for edit, because this way did NOT get the additional properties from my custom object! (I don't know why) o) I don't know how to do tal:contidion with the if-then-else system (that's why the first condition in <span tal:condition="not:exists:here/REQUEST/form/edit_me" and the second one is directly the opposite: <span tal:condition="exists:here/REQUEST/form/edit_me" o) I'm looking for some way of changing my object to get the index_html template directly from inside the object, to not use the ?edit_me=1 parameter, is there any way? Does anyone have any ideas how to improve this? (or also any link to good documentation about ZPT connected with creating custom product classes would be appreciated; I have read ZopeBook, but was not able to find solutions for these here, maybe I've overseen something?) Thanks a lot in advance! -Lubos. On 07 Mar 2003 00:07:32 -0600, Edward Muller <edwardam@interlix.com> wrote:
If your asking that question there is a possibility that you don't understand zope acquisition. Which is all right ... I think we all didn't get it at one point.
I assume you want to use index_html as a template (or wrapper) for the content in some deeper folder?
If so all you need to do (sorry this is in zpt ... don't use dtml much anymore)...
in a zpt in your root folder ..
<html> <body> <div> or table or what not containing whatever you want to appear before the "content" </div> <div tal:content="structure here/content"/> <div> or table or what not containing whatever you want to appear after the "content" </div> </body> </html>
Now just create folders ... and stick a file (dtml or zpt or python script or whatever) called 'content' wherever you want it to appear.
So if I had a folder layout like the following:
/articles/linux/2003/03/07/01
I would put a zpt (or dtml document/method) called 'content' in the /articles/linux/2003/03/07/01 folder.
And when I surfed to:
http://server/articles/linux/2003/03/07/01
I would get the content file 'wrapped' with the index_html somewhere up the folder 'path'.
You can further customize things by using macros and slots and all the zpt goodies. Plus if you ever need to 'override' your index_html file deeper in you folder 'tree' just create a new one at the highest level you want to start using it.
Hope this helps
On Thu, 2003-03-06 at 08:49, Lubos Culen wrote:
Hi!
Maybe this is more Python question, but because I'm using it with Zope, I'm posting it here.
Let's suppose I have DTML Method called e.g. 'index_html' . It has one input parameter 'obj' which contains name of existing file object inside the directory tree. For example, the index_html file would be called as:
www.mysite.com/path/index_html?obj=path.to.object.file
Then in folder www.mysite.com/path/path/to/object/file in this example would be the DTML document I'd like to be displayed. I have to make proper code in the index_html file do do this.
I tried do following in index_html:
<dtml-var obj>
But this echoes only plain text ('path.to.object.file') and not the object's content. I need to find some way how to convert this string to object, so Zope (or Python) can understand it as an object and display its content. Is there some way?
Thanks a lot for any answer!
-- Regards, Mirsoft
participants (4)
-
Dieter Maurer -
Edward Muller -
Lubos Culen -
Max M