On Jul 9, 12:24 pm, Karen Tracey <kmtra...@gmail.com> wrote: > I'm strongly against that idea. Swallowing errors makes it incredibly > difficult to debug errors. I would prefer for the `TEMPLATE_DEBUG` setting to > turn off much of the error-silencing currently done in template processing. > Yes, that means different behavior during development compared to > production. But running with DEBUG (template or otherwise) on IS different > from production, that's a given. And it this case it would allow for more > effective development since errors wouldn't be hidden away in nearly > impossible-to-find places. In my mind that's a tradeoff well worth making. > > See ticket #13167 for one example of where "template errors" have not been > silenced since before 1.0. If that case is to be be "fixed" now, I would > very much want that silencing to ONLY happen when TEMPLATE_DEBUG is False. > In my opinion silencing these during development would be a huge step > backwards.
I think we are in agreement here. Swallowing errors makes it incredible difficult to debug errors. I would like to see the circumstances when exceptions are swallowed be more clearly defined, and ensure that only exceptions that are expected to be swallowed, are swallowed. If we can do that, then there should be no need for the behaviour to change based on the `TEMPLATE_DEBUG` setting. The problem with the inconsistent behaviour associated with this setting is exceptions that are expected to be swallowed, that we want to be swallowed, are not being swallowed in some cases when `TEMPLATE_DEBUG = True`. This can make it impossible to access some URLs on a website where such a condition is present, even though there is no actual error and the exception is expected to be silenced. It also results in some exceptions being transformed into `TemplateSyntaxError` sometimes, and the true exception raised other times. See ticket #16147 for an example where `TemplateDoesNotExist` is raised when the template DOES exist, because a template tag inside the template being loaded raises `TemplateDoesNotExist` at compile time, only when `TEMPLATE_DEBUG = True`. This can make it impractical to develop locally with `TEMPLATE_DEBUG = True`, because it can prevent access to working pages, which means you miss out on all the enhanced debugging that `TEMPLATE_DEBUG = True` provides when you encounter an actual error that needs developer attention. With the intent being that template authors should not be able to trigger HTTP 500 errors on a production site, couldn't we achieve that by silencing exceptions raised when an invalid argument was passed to a template tag (e.g. `ValueError` or `TypeError` in the template tag code), but allowing exceptions raised in the code for the object that was passed in to the template tag as an argument? For example, if an object that calculates and returns a number when evaluated is passed to `{% widthratio %}`, but there is a bug in the code of that object and it raises some kind of exception when evaluated, that should not be silenced. It should bubble up so that the developer is alerted to a problem in the code for that object (not an error that the template author has made by passing an invalid argument). However, if there was no exception raised in evaluating the object, but it simply returned something other than a number, then that should behave the same as if an empty string or missing template variable was passed in and no exception should be raised. I think that a `TemplateSyntaxError` should be raised at compile time if an invalid template tag is used (unknown, too few or too many arguments). The `render()` function for a template tag should silence exceptions raised when arguments with the incorrect type or value are provided, but should not silence exceptions raised when evaluating the arguments themselves (or properties on the arguments). Cheers. Tai. -- 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 django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.