Cycle tag since 1.2

2010-06-05 Thread cootetom
Hi all,

I've decided to upgrade to 1.2 but have hit a stumbling block with the
cycle tag. The release notes here 
http://docs.djangoproject.com/en/dev/releases/1.2/#stateful-template-tags
say that because of the new thread safe template renderer that
including another template whilst inside a loop means the included
template doesn't know the state of the cycle tag.

So I understand why this was done but I'm also trying to find a way to
now make my templates work. I always put the HTML for table rows in
their own template and then include them in the page template inside
loops. This is because if I then need to create just a single table
row then I have the template that does that. However I can't figure
out now how to inform the included template which row class names to
use as I've always used the cycle tag in the past.

Has anyone else come up with a pattern to solve this?

- Tom

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



Cycle tag since 1.2

2010-06-06 Thread cootetom
Hi all,

I've decided to upgrade to 1.2 but have hit a stumbling block with the
cycle tag. The release notes here 
http://docs.djangoproject.com/en/dev/releases/1.2/#stateful-template-tags
say that because of the new thread safe template renderer that
including another template whilst inside a loop means the included
template doesn't know the state of the cycle tag.

So I understand why this was done but I'm also trying to find a way to
now make my templates work. I always put the HTML for table rows in
their own template and then include them in the page template inside
loops. This is because if I then need to create just a single table
row then I have the template that does that. However I can't figure
out now how to inform the included template which row class names to
use as I've always used the cycle tag in the past.

Has anyone else come up with a pattern to solve this?

- Tom

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



Re: Cycle tag since 1.2

2010-06-06 Thread Russell Keith-Magee
On Sun, Jun 6, 2010 at 8:05 AM, cootetom  wrote:
> Hi all,
>
> I've decided to upgrade to 1.2 but have hit a stumbling block with the
> cycle tag. The release notes here 
> http://docs.djangoproject.com/en/dev/releases/1.2/#stateful-template-tags
> say that because of the new thread safe template renderer that
> including another template whilst inside a loop means the included
> template doesn't know the state of the cycle tag.
>
> So I understand why this was done but I'm also trying to find a way to
> now make my templates work. I always put the HTML for table rows in
> their own template and then include them in the page template inside
> loops. This is because if I then need to create just a single table
> row then I have the template that does that. However I can't figure
> out now how to inform the included template which row class names to
> use as I've always used the cycle tag in the past.
>
> Has anyone else come up with a pattern to solve this?

Sure - Move the cycle tag outside the include.

Included templates inherit the context from the template that does the
including, so if you define the cycle tag outside the include using
the "as X" assignment syntax, you can use that variable in your
template. So, if you previously had:

{% for x in values %}
   {% include "subtemplate.html" %}
{% endfor %}

with subtemplate.html of:

{% cycle 'a' 'b' %}

you can replace this with:

{% for x in values %}

{% include "subtemplate.html" %}
{% endfor %}

with a subtemplate.html of:
{{ row }}

The one slight complication is that {% cycle 'a' 'b' as row %} outputs
the value of the cycle. This means you'll need to find some way to
hide this output (such as putting it in a HTML comment as in the
example I have given). This is a known issue (#13567), but it's not
trivial to fix because there are some backwards-compatibility issues
that need to be addressed.

Yours,
Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.



Re: Cycle tag since 1.2

2010-06-07 Thread cootetom
Thanks, I've used the method that you have explained. I've had a read
of the ticket on this and there is now a patch which I've used so I
can pass a parameter into the cycle tag to tell it now to write an
output.



On Jun 7, 2:38 am, Russell Keith-Magee 
wrote:
> On Sun, Jun 6, 2010 at 8:05 AM, cootetom  wrote:
> > Hi all,
>
> > I've decided to upgrade to 1.2 but have hit a stumbling block with the
> > cycle tag. The release notes 
> > herehttp://docs.djangoproject.com/en/dev/releases/1.2/#stateful-template-...
> > say that because of the new thread safe template renderer that
> > including another template whilst inside a loop means the included
> > template doesn't know the state of the cycle tag.
>
> > So I understand why this was done but I'm also trying to find a way to
> > now make my templates work. I always put the HTML for table rows in
> > their own template and then include them in the page template inside
> > loops. This is because if I then need to create just a single table
> > row then I have the template that does that. However I can't figure
> > out now how to inform the included template which row class names to
> > use as I've always used the cycle tag in the past.
>
> > Has anyone else come up with a pattern to solve this?
>
> Sure - Move the cycle tag outside the include.
>
> Included templates inherit the context from the template that does the
> including, so if you define the cycle tag outside the include using
> the "as X" assignment syntax, you can use that variable in your
> template. So, if you previously had:
>
> {% for x in values %}
>    {% include "subtemplate.html" %}
> {% endfor %}
>
> with subtemplate.html of:
>
> {% cycle 'a' 'b' %}
>
> you can replace this with:
>
> {% for x in values %}
>     
>     {% include "subtemplate.html" %}
> {% endfor %}
>
> with a subtemplate.html of:
> {{ row }}
>
> The one slight complication is that {% cycle 'a' 'b' as row %} outputs
> the value of the cycle. This means you'll need to find some way to
> hide this output (such as putting it in a HTML comment as in the
> example I have given). This is a known issue (#13567), but it's not
> trivial to fix because there are some backwards-compatibility issues
> that need to be addressed.
>
> Yours,
> Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.