On 12/9/07, Gary Wilson <[EMAIL PROTECTED]> wrote: > > Vinay Sajip wrote: > > On Dec 7, 6:35 pm, "Marty Alchin" <[EMAIL PROTECTED]> wrote: > >> On Dec 7, 2007 12:56 PM, Vinay Sajip <[EMAIL PROTECTED]> wrote: > >> > >>> this be allowed/disallowed/checked for? As for standard template > >>> loading, there's no reason that the standard template loading > >>> (app_loader) code could not be modified to work with App instances, > >>> using whatever logic to use the application path and/or label to > >>> locate the templates. Or have I misunderstood Malcolm's comment? > >> The problem here is that a distributed app has to expect specific > >> paths to its templates, both for its views (for render_to_response, > >> for instance) and its templates (for extends and include). If my > >> template says "{% extend 'modular/module.html %}', what would happen > >> if someone had "App('modular', name='mod_app')"? How would the extends > >> tag be able to locate the correct template if someone essentially > >> renamed the app? > >> > > > > The current code in django/template/loaders/app_directories.py appears > > to search in the directory 'templates' relative to the directory > > containing the app module. I can't quite see why this needs to change: > > it's independent of the app label, shouldn't that be OK? > > It does look in the "templates" directory of the application directory; > however, it gets treated as a standard, global template directory. Current > practice is to repeat the name of your application inside the "templates" > directory to avoid name collisions. For example: > > myblogapp/templates/myblogapp/base.html > > So even if you were to specify an app_label of "blog" for this app, you would > still have to reference the templates as "myblogapp/base.html". > > The current app_directories template loader has always bugged me because it > is: > > 1) inefficient - all application template directories are added as global > template directories and are searched each time by the template loader. > > 2) unpredictable - any application could, unbeknownst to the developer, > override another application's templates. For example, an application could > include an "admin" directory in its "templates" directory that overrides admin > templates. > > 3) not DRY - just silly I have to make my "templates" directory one level > deeper with a duplicated name. > > For those of you that have stopped using the app_directories loader in favor > of the standard filesystem loader and TEMPLATE_DIRS, what was your reasoning > behind doing so? > > And doesn't doing things this was cause the same problems? Every directory > added is going to get searched as a global template directory. You're still > going to have the unpredictability of apps possibly overriding templates of > other apps. You are still going to be repeating yourself by having to put the > app in INSTALLED_APPS and its template directory in TEMPLATE_DIRS. > > I have always thought that you should be able to put an app's templates in its > "templates" directory and that those templates should only be accessible when > using the app name in front of it, like "myblogapp/base.html". The > "myblogapp/templates" directory should not be looked at in any other case, and > only global template directories are looked at every time by the filesystem > template loader. > > This should also work with custom app_naming, since now the templates would be > accessible with the custom name, i.e. "blog/base.html". This would also work > if you had two instances of an app running under two different names, i.e. > "blog1/base.html" and "blog2/base.html". And I could still override these in > a global template directory with directories named "blog1" and "blog2".
FWIW I pretty much agree with Gary. And surprisingly, I actually agree with myself of two years ago when we discussed this before [1] [2]. There's also another related thread [3] and a ticket [4] that Adrian and Jacob both agreed to mark as wontfix. Their arguments against such a template loader are in the ticket. They have a valid point, but changing the app_directories template loader still seems like the cleanest way to deal with custom app_labels and templates to me. Maybe this will prompt ideas for another solution though. Joseph [1] http://groups.google.com/group/django-developers/browse_thread/thread/7197d27127494ee2/df18ee9b91ba383c [2] http://groups.google.com/group/django-developers/msg/f10d34ebd266fbe2 [3] http://groups.google.com/group/django-developers/browse_thread/thread/49bf270495624a4/8e99219f87db975f [4] http://code.djangoproject.com/ticket/1586 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-developers?hl=en -~----------~----~----~----~------~----~------~--~---