#27130: Allow using the DjangoTemplates engine without configuring settings
-------------------------------------+-------------------------------------
     Reporter:  Al Johri             |                    Owner:  reficul31
         Type:                       |                   Status:  closed
  Cleanup/optimization               |
    Component:  Template system      |                  Version:  master
     Severity:  Normal               |               Resolution:  wontfix
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  1                    |  Patch needs improvement:  1
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Aymeric Augustin):

 * status:  assigned => closed
 * resolution:   => wontfix


Comment:

 Perhaps this analogy will help:

 django.template.Engine ~ sqlite3.connect
 django.template.backends.django.DjangoTemplates ~
 django.db.backends.sqlite3.base.DatabaseWrapper

 The two live in the same namespace for historical reasons. Moving the
 implementation of the engine outside of `django.template` would be
 backwards incompatible for no significant benefit.

 I wrote a
 [https://github.com/django/django/blob/master/django/template/__init__.py
 large docstring] to clarify which modules belong to the standalone
 template engine and which modules allow using arbitrary backends with a
 unified API. See also DEP 182.

 ----

 Replying to [comment:14 reficul31]:

 > I read over the docs of the django.template.engine and knew that it
 worked in standalone mode.

 If you think the docs could state more clearly that this is the API to use
 if you want to use the Django template engine in standalone mode, let's
 improve them.

 (Since it's hard to figure out how docs that you wrote yourself could be
 unclear to others, I'm not in the best position to do that.)

 > I thought the gist of the ticket was to provide DjangoTemplates with
 that functionality too.

 Unfortunately, it was incorrectly accepted based on a misunderstanding. It
 should have been closed as wontfix. I realized the problem only when I saw
 your PR.

 > I might be wrong but is it a functionality that could cause problems?

 Yes, it would worsen the problem that the existence of this ticket
 demonstrates.

 Even though the documentation is unambiguous, there's already some
 confusion between the concepts of "template engine" (any library that can
 render templates) and "template backend" (a thin integration layer for
 configuring a template engine from Django settings). Adding to the
 ambiguity by blurring the roles of Engine and DjangoTemplates would
 increase confusion.

 > Eg. For most of my projects I use DjangoTemplates backend and it would
 be nice if i could test my templates on it.

 DjangoTemplates is nothing more than an Engine configured from Django
 settings. Here's the whole implementation:

 {{{
     def __init__(self, params):
         params = params.copy()
         options = params.pop('OPTIONS').copy()
         options.setdefault('autoescape', True)
         options.setdefault('debug', settings.DEBUG)
         options.setdefault('file_charset', settings.FILE_CHARSET)
         libraries = options.get('libraries', {})
         options['libraries'] = self.get_templatetag_libraries(libraries)
         super().__init__(params)
         self.engine = Engine(self.dirs, self.app_dirs, **options)
 }}}

 and then there's a couple methods that forward to the corresponding
 methods on Engine.

 If your projet uses Django settings and the DjangoTemplates backend, then
 your tests should use Django settings as well, and there's no use making
 DjangoTemplates work without settings.

 If your projet doesn't use Django settings and configures an Engine in
 standalone mode, then you don't use DjangoTemplates, not does it make any
 sense, since you don't have Django settings.

--
Ticket URL: <https://code.djangoproject.com/ticket/27130#comment:15>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/065.4f6b233219f7168128874750247ee927%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to