[Twisted-web] fragments with child lookup

Markus Schiltknecht markus at bluegap.ch
Fri Sep 22 11:47:47 CDT 2006


Hello Valentino,

You wrote:
> Ok but this should be accomplished in a different way IMHO. You should 
> have a Fragments container somewhere and lookup stuff in there. It 
> doesn't make too much sense to have fragment children IMHO.

Why not? I often have 'sub-templates', like you see in my example, where 
the hierarchy for URL 'www.mysite.com/foo/bar.html' would be:

autohandler > foo/autohandler > foo/bar.html

'autohandler' is never going to include 'foo/bar.html' directly. And 
both 'autohandler' as well as 'foo/autohandler' should always have a 
child to include somewhere.

To clarify the concepts of Pages and Fragments, the top level template 
(the 'autohandler') does not exactly look like a 'Fragment' to me, since 
it includes all the <html><head .../><body .../><html> tags.

> Well... Pages can be used in place of the Fragments but they will be 
> considered as Fragments with no extra functionality (even if the code is 
> there) thus it's better to stick with Fragments entirely for this usecase.

Uhm... but I can add render_xy and data_xy to Fragments, can't I?

>> As you can see in my example, I've written my own 
>> 'locateFragmentChild()' method which does exactly what I'm describing 
>> above.
> 
> Well but you just need to lookup stuff here and there,

No, I need to look stuff up in the Fragment, then that Fragment again 
needs to lookup it's 'child'.

It's not like using a Fragment for the top navigation, one for the 
breadcrumbs and one for the content. Although I could do it that way, it 
would be confusing, because I would always have to check the URL (or the 
segments in nevow). I'd loose the hierarchy information in my code.

> if you need to 
> include  different fragments in a particular fragment then I guess this 
> locateFragmentChild is sort of useful although the name is not the best 
> I can think of, simply locateFragment should be enough (but as I can see 
> there's really no fixed hiararchy of Fragments and you shouldn't use the 
> same mechanism used in locateChild, I'd rather go with a dictionary 
> containing all of them because in the end that's what you are actually 
> doing, including a fragment depending on the url segment).

Well, I think you got it by now: I just really, really, really want to 
arrange my Fragments hierarchically.  :-)

>> <snipped my example>
> 
> I don't see a connection between this and the fragments though.

For me these also looks more like Pages. But I can't set
docFactory = ['autohandler', 'foo/autohandler', 'foo/bar.html']

Or would that probably be an alternative? Write a DocFactory which 
processes multiple templates, which include their child with a special 
content renderer...  Or just read all the templates and output one Stan 
tree, doing the multiple-template-connecting in the DocFactory?

> Yes, they are a recent addition for a usecase in Quotient. You can pass 
> arguments by using closures of course. But inserting renderers is a 
> strage usecase, I've never needed it and pre-processors were added to 
> change urls on the fly (I think for caching purposes) when loading 
> templates, not for changing templates in that hard way. You might find 
> some problems in doing that, but I've never tried.

Why should that lead to problems? Seems like a very clever concept to me 
(adding renderers or data on the fly with preprocessors).

I'm also changing urls on the fly, the relative ones. If I can pass 
arguments to the preprocessor, I can easily get away without adding a 
renderer.

Thank you for your help, I'll have a look at your nevow sources.

Markus




More information about the Twisted-web mailing list