Any feedback on how I was thinking? Does it make sense? 

Based on the feedback so far I gather that changing the block tag is a bad 
idea. I'd love to continue working on this, because I've felt this need in 
lots of different projects. A new proposal could be in terms of a new pair 
of tags, maybe "layout" and "content". But before going further I would 
love some thoughts on the area, and if you think it's a worthwhile problem 
to solve.

/Emil

On Wednesday, 17 April 2013 23:56:40 UTC+2, Emil Stenström wrote:
>
> Jacob Kaplan-Moss skrev 2013-04-17 18:36: 
> > On Wed, Apr 17, 2013 at 10:50 AM, Emil Stenström <e...@kth.se> wrote: 
> >> {% extends "base.html" %} 
> >> {% block content %} 
> >>      <div class="warning">Be careful when changing these 
> settings!</div> 
> >>      {% block content %}{% endblock %} 
> >> {% endblock %} 
> > 
> > I find this intensely confusing -- I can't build a mental model of 
> > what's going to be rendered there. Allowing re-definining of existing 
> > blocks nested inside those blocks... ouch. I'm -1 on allowing this; it 
> > just seems incredibly confusing and error prone. 
>
> The mental model I have, and that I've seen many beginners have when 
> comming from other languages, is that the outmost tag is what you're 
> "filling in", and the innermost block is what you're making available 
> for child templates. 
>
> ASP.Net: 
> Parent: <asp:contentplaceholder id="Main" runat="server" /> 
> Child: <asp:content ContentPlaceHolderID="Main" Runat="server"> ... 
> </asp:content> 
>
> JSF: 
> Parent: <ui:insert name="content" /> 
> Child: <ui:define name="content"> ... </ui:define> 
>
> Rails: 
> Parent: <%= yield :head %> 
> Child: <% content_for :head do %> ... <% end %> 
>
> I'm not saying I think you should differetiate the two, just explaining 
> my mental model. The big difference is of course that I'm separating 
> what a template consumes and what it makes a block available to child 
> templates. 
>
> I understand the differences to your mental model, that nested blocks 
> are also available to child templates. 
>
> > The general way I've solved this in the past is pretty straightforward:: 
> > 
> >      {% block content-wrapper %} 
> >          <div class="warning">Be careful when changing these 
> settings!</div> 
> >          {% block content %}{% endblock %} 
> >      {% endblock %} 
> > 
> > What's wrong with this? 
>
> This is "Alternative 1" in my original message, sorry if this was 
> unclear. Say I change base.html to have a content-wrapper block, and put 
> your code in base_with_warning. Half my templates inherit from base and 
> half from base_with_warning. Now when I decide I want to add a warning 
> to a template that previously didn't have one, I change parent template 
> AND need to remember to rename the block to content instead of 
> content-wrapper. The "rename block"-part is the difference between our 
> two variants. 
>
> In projects with lots of templates, this quickly becomes a maintainance 
> nightmare. People forget the change the block name, and accidentially 
> don't get the warning they expect, even though they are explicitly 
> inheriting from base_with_warning. It's a mess. 
>
> This is the problem I'm trying to solve with my proposal. I agree it's 
> slightly backwards, but I couldn't come up with a smarter way. 
>
> /Emil 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at http://groups.google.com/group/django-developers?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to