Cool! FWIW I built the same feature as an external app called django-overextends some time ago, you might like to compare implementations:
https://github.com/stephenmcd/django-overextends/ https://github.com/stephenmcd/django-overextends/blob/master/overextends/templatetags/overextends_tags.py On Saturday, 7 December 2013 01:36:00 UTC+11, unai wrote: > > Hi! > > Pablo Martín (goinnn[0]) and I have been working on self-referenced > template > recursion handling for the past few weeks. The idea is that when a > template > references itself when extending, recursion is avoided by skipping the > current > template loader (ticket #15053[1]). > > This new feature would be totally backwards compatible, have no > performance > penalties[2] (measured with djangobench) and could, in my opinion, be one > of the > main features of the 1.7 release: > > Lot of app/CMS creators create base templates for their apps. Currently, > if one > of those templates needs some kind of change, the user needs to copy the > template all over again, making it difficult to update their templates > when > they update their apps (they would need to copy the new template and then > make > their customizations again). > > Skipping the current template loader means that they would be able to > create > their own template (with the same path as the app template), extend it to > itself and only change the blocks that need to be changed. For example: > > App loader: some_app/item_list.html > > {% block title %}Item list{% endblock title %} > > {% block content %} > {% for item in items %} > ... > {% endfor %} > {% endblock content %} > > > Filesystem loader: some_app/item_list.html > > {% extends 'some_app/item_list.html' %} > > {% block title%}Custom title!{% endblock title %} > > This feature has also the added benefit of opening the doors to > self-reference > handling inside app and egg loaders. We are already giving some thought to > this > idea. > > We are aware that this is not a small change in the template engine so > reviews > and suggestions are highly appreciated. The pull request can be found at: > https://github.com/django/django/pull/2042 > > Greetings, > > Unai Zalakain > > References > ---------- > > [0] https://github.com/goinnn/ > [1] https://code.djangoproject.com/ticket/15053 > [2] Benchmark: > > Running benchmarks: template_compilation template_render > template_render_simple > Control: Django 1.7.dev20131205221130 (in git branch master) > Experiment: Django 1.7.dev20131205224944 (in git branch ticket_15053) > > Running 'template_compilation' benchmark ... > Min: 0.000716 -> 0.000733: 1.0240x slower > Avg: 0.000981 -> 0.000996: 1.0150x slower > Not significant > Stddev: 0.00245 -> 0.00245: 1.0002x smaller (N = 100) > > Running 'template_render' benchmark ... > Min: 0.014449 -> 0.014756: 1.0213x slower > Avg: 0.015204 -> 0.015336: 1.0087x slower > Not significant > Stddev: 0.00296 -> 0.00298: 1.0053x larger (N = 100) > > Running 'template_render_simple' benchmark ... > Min: 0.000135 -> 0.000134: 1.0071x faster > Avg: 0.000385 -> 0.000385: 1.0016x faster > Not significant > Stddev: 0.00245 -> 0.00245: 1.0021x smaller (N = 100) > -- 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/a20b591b-7b98-46ae-8389-a04c47e0d8c8%40googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
