Curtis,

You are welcome to include it in your project and I'm happy to help out. 
Depending on what happens here I may still release it as a simple 
standalone app though.

I do think this is the kind of thing that would do best in core though as 
it would ensure that there was a standardised patten for creating these 
reusable template components.


Marc,

I am happy to have a look around (and have already to some extent when 
developing this) and put together a review of the various existing options. 
This is my first foray into contributing to Django and so I am keep to help 
in any way.

Does anyone know of anything particular I should be looking at?



On Thursday, September 4, 2014 2:06:15 PM UTC+1, Marc Tamlyn wrote:
>
> I would like to see someone do a review of the various third party 
> implementations of concepts like this, I think there's a place in core for 
> some variant, it's just working out which one the "right" one is.
>
> The other issue with adding new tags to core (especially with "common" 
> names) is name clashes with third party code. This shouldn't be too 
> significant though if we have enough use.
>
>
> On 4 September 2014 12:09, Josh Smeaton <[email protected] <javascript:>
> > wrote:
>
>> I really like this idea, and have wanted something similar every time I 
>> start a new project and begin building out the main template. I think 
>> including this (or something like this) in core is a great idea. Just 
>> because it *can* be implemented in 3rd party code, doesn't mean it has to 
>> be.
>>
>>
>> On Thursday, 4 September 2014 02:10:33 UTC+10, Sam Willis wrote:
>>>
>>>  Hi All,
>>>
>>> I would like to propose a new template tag to be included in Django, it 
>>> is sort of a cross between 'include' and 'extends'. You can find an 
>>> implementation here: https://gist.github.com/
>>> samwillis/af3992f69c2597a16252
>>>
>>> The main use case for this tag is being able to create reusable 
>>> 'components' for rendering a website. Say for example a page header, a 
>>> panel with headers and footers, or a modal window (as seen in the Bootstrap 
>>> framework). Rather than needing to repeat the html everywhere you need it 
>>> and having to search out all occurrences to make a change to the structure 
>>> you can create a simple template and include it.
>>>
>>> To some extent this can currently be done with either an included 
>>> template using the '{% include "template.html" with var="value" %}' syntax 
>>> or using a custom template tag. However, the former isn't suitable for 
>>> changing whole blocks in the include template, and the latter can be 
>>> overkill and may not be suitable for a designer with little knowledge of 
>>> Python and the Django Template API.
>>>
>>> The 'use' tag loads a template and renders it with the current context 
>>> similar to the 'include' tag. You can pass additional context using keyword 
>>> arguments as well as override blocks in the included template.
>>>
>>> Example (simple) template:
>>>
>>> <div class="page-heading {{ extra_class }}">
>>>     <h1>{% block heading %}{% endblock %}</h1>
>>> </div>
>>>
>>> Example 'use' tag use with the above template:
>>>
>>> {% use "page_header.html" %}
>>>     {% block heading %}Some Title{% endblock %}
>>> {% enduse %}
>>>
>>> {% use "page_header.html" with extra_class="large" %}
>>>     {% block heading %}Some Title{% endblock %}
>>> {% enduse %}
>>>
>>> As with 'include' use the 'only' argument to exclude the current context 
>>> when rendering the included template:
>>>
>>> {% use "page_header.html" only %}
>>>     {% block heading %}Some Title{% endblock %}
>>> {% enduse %}
>>>
>>> {% use "page_header.html" with extra_class="large" only %}
>>>     {% block heading %}Some Title{% endblock %}
>>> {% enduse %}
>>>
>>> The included template receives an additional context variable called 
>>> 'used_blocks' which is a Dict indicating which blocks were overridden in 
>>> the 'use' tag. Using this you can conditionally show content around the 
>>> block. For example, if you had this template for generating a page heading:
>>>
>>> <div class="page-heading">
>>>     <h1>{% block heading %}{% endblock %}</h1>
>>>     {% if used_blocks.sub_heading %}
>>>         <h2>{% block sub_heading %}{% endblock %}<h2>
>>>     {% endif %}
>>> </div>
>>>
>>> and included it using:
>>>
>>> {% use "page_header.html" %}
>>>     {% block heading %}My Page Title{% endblock %}
>>> {% enduse %}
>>>
>>> it would exclude the '<h2>' tags from the empty subheading.
>>>
>>> Finally, as syntactic sugar if you are just overriding a single block 
>>> you can express it as:
>>>
>>> {% use "page_header.html" block heading %}
>>>     My Page Title
>>> {% enduse %}
>>>
>>> These example are a little simple, but this could be incredibly useful 
>>> for more complex components such a modal windows.
>>>
>>> I have made a first pass at an implementation here: 
>>> https://gist.github.com/samwillis/af3992f69c2597a16252.
>>>
>>> Although I have implemented this with the 'use' word, there may be a 
>>> better word. I considered 'embed' but thought 'use' was a little cleaner
>>>
>>> Thanks,
>>> Sam
>>>
>>>  -- 
>> 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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/django-developers.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-developers/bb252615-f881-4233-a69b-ae40faf3a694%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-developers/bb252615-f881-4233-a69b-ae40faf3a694%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/e2ba4e78-8516-45d5-bf71-a4bb8247a8c3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to