Colin Howlett wrote:
> Robert Wittams wrote:
>
>>Sorry, I just can not work out what on earth you are actually trying to
>>achieve - too many instances of the word 'generic'... A concrete
>>example would be best.
>
>
> Robert,
>
> Sorry, I guess I wasn't communicating very clearly.
>
> What I want is something like the {% include %} tag but with batteries
> included. With the {% include %} tag I still have to find some context
> from somewhere to render the included template - either it's provided
> by the main (custom) view or by custom template tags - I'd like to get
> it from something like a generic view - the less coding the better.
>
> An example:
>
> Suppose I make a very simple site to show details of people - I have a
> template to show name, date of birth etc. I want to visit e.g.
> http://localhost/people/1/ to see the first person's details,
> .../people/2/ to see the second etc., so I create a urlconf to connect
> urls of the form /people/(\d+)/ to an object_detail generic view and
> pass in a dictionary with app_label and module_name set appropriately.
>
> Suppose I make a very similar simple site for cars instead of people.
>
> So every page looks something like this in my people app:
>
> Name: Bob Jones
> Date of birth: 10/10/2010
>
> or this in my car app:
>
> Manufacturer: Ford
> Model: Focus
> Color: Red
>
> Then I decide I would like to add, on each page, next to the detail of
> each person or car, a list of all people or all cars, so I can click on
> a person or car and it will take me to the detail page for that person
> or car (which still has the list next to the detail). So every page
> looks something like this in my people app:
>
> Bob Name: Bob Jones
> Mary Date of birth: 10/10/2010
> John
>
> or this in my car app:
>
> Ford Focus Manufacturer: Ford
> Hummer H2 Model: Focus
> Fiat Panda Color: Red
>
> If I was to make a list of all cars or people as a separate page I
> could use an object_list generic view, but since I've already used an
> object_detail generic view for my page I can't use another view - each
> page has only one view. Obviously I could write a custom view, but I
> like generic views - what would be nice would be if I could make a page
> just for the list, using a generic view, configured with a url, and
> then include that page, rendered by its generic view, into my original
> page, just by including its url. That's what my template tag above
> does.
>
> In other words my {% include_url %} template tag is kind of like the {%
> include %} tag, but it doesn't take the path to a template, it takes
> the url of a page, and instead of being replaced by that un-rendered
> template (which is subsequently rendered with the context of the
> template it is included within), it is replaced by the rendered page.
>
> --
>
> An alternative would be to write template tags equivalent to each
> generic view and use those along with an {% include %} tag.
>
> --
>
> I think each solution has their pros and cons - my include_url tag
> requires that the pagelets (i.e. the pages showing just the lists) have
> their own urls - which doesn't seem right since nobody should ever
> really navigate to those urls (except perhaps for testing) - they're
> just used for including in the main page.
>
> On the other hand if I use some kind of new 'generic' template tags
> (i.e. template tag equivalents of generic views) then I have two
> choices:
>
> - I could add the 'generic' template tag to the *included* template -
> but then the included template has to hard code all the values to pass
> to the 'generic' template tag (such as the app_label and the
> module_name) and I can't re-use it.
>
> - I could add the 'generic' template tag to the *including* template,
> but then it pollutes the context. The generic template tag would have
> to return something like 'object' or 'object_list' so I couldn't add
> two in the same template.
>
> I'm still not sure which is the best way, or if there's another way I
> haven't thought of.
>
> I hope that's at least slightly clearer.
>
>
Ok,
I think you want to use inclusion_tag.
It is an easy way to create an template tag with custom logic.
Search back in the archives for examples of its use, or look at the
examples in the admin templatetags directories.