I'd like to merge the current patch that removes the trailing newline in
the attrs.html template, then revisit the issue of {% include %} stripping
the trailing newline for the next version of Django so we don't need to
rush a decision about that.
On Thursday, January 5, 2017 at 10:05:30 AM UTC-5, Alasdair Nicol wrote:
>
> Would adding the future include tag to the builtins in the template
> OPTIONS work? If it did, then you'd only have to make the change to the
> TEMPLATES setting instead of every template.
>
> OPTIONS={
> 'builtins': ['django.template.future_include'], # put new include
> in it's own module so that we don't add anything else in future.
> }
>
> I'm not familiar with that code, so I don't know whether that would
> override the old include tag.
>
> Cheers,
> Alasdair
>
> On Thursday, 5 January 2017 14:49:58 UTC, Tim Graham wrote:
>>
>> Hi Simon, I mentioned that idea offhand in an earlier mail, however, I
>> feel that it would be really disruptive to force all projects to go through
>> that deprecation and require adding {% load include from future %} to every
>> template that uses the tag to silence warnings (and then remove those lines
>> sometime after the deprecation ends). (More disruptive than just making a
>> backwards-incompatible change that's likely to affect a (hopefully small)
>> subset of users.) I guess I'm open to it if others think that's the way to
>> go though.
>>
>> On Thursday, January 5, 2017 at 9:20:36 AM UTC-5, charettes wrote:
>>>
>>> Hey Tim,
>>>
>>> I just wanted to mention that another approach for a transition plan
>>> could be
>>> to use {% load include from future %} like we did with the {% url %} tag.
>>>
>>> That doesn't answer the question of whether or not we should make the
>>> change
>>> but I think it offers a better upgrade path than a global template
>>> option or
>>> a keep_trailing_newline kwarg.
>>>
>>> Simon
>>>
>>> Le mercredi 4 janvier 2017 14:58:42 UTC-5, Tim Graham a écrit :
>>>>
>>>> Shortly after template widget rendering was merged, an issue about
>>>> extra newlines appearing in the rendered output was reported [0]:
>>>>
>>>> For example, from django-money:
>>>>
>>>> <option value="XFU" \n>UIC-Franc</option>
>>>> \n\n
>>>> <option value="USD" selected\n>US Dollar</option>
>>>> \n\n
>>>>
>>>> The newlines aren't useful and they break assertions like this:
>>>>
>>>> <option value="USD" selected>US Dollar</option> in form.as_p
>>>>
>>>> --- end report---
>>>>
>>>> The reporter suggested removing the trailing newline in the attrs.html
>>>> template but Adam Johnson reported: "POSIX states that all text files
>>>> should end with a newline, and some tools break when operating on text
>>>> files missing the final newline. That's why git has the warning \ No
>>>> newline at end of file and Github has a warning symbol for the missing
>>>> newline."
>>>>
>>>> I suggested that perhaps {% include %} could do .rstrip('\n') on
>>>> whatever it renders.
>>>>
>>>> Preston pointed out that Jinja2 does something similar:
>>>>
>>>> http://jinja.pocoo.org/docs/dev/templates/#whitespace-control
>>>>
>>>> - a single trailing newline is stripped if present
>>>> - other whitespace (spaces, tabs, newlines etc.) is returned
>>>> unchanged
>>>>
>>>> I noted that the issue of {% include %} adding extra newlines was
>>>> raised in #9198 [1] but Malcolm said, "For backwards compatibility reasons
>>>> we cannot change the default behaviour now (there will be templates that
>>>> rely on the newline being inserted)." I was skeptical this would be a
>>>> burdensome change.
>>>>
>>>> Carl replied: "It seems quite likely to me that there are templates in
>>>> the wild relying on preservation of the final newline. People render
>>>> preformatted text (e.g. text emails) using DTL. I probably have some text
>>>> email templates in older projects myself that would break with that
>>>> change.
>>>>
>>>> We could add a new option to {% include %}, though." Adam also said,
>>>> "I too have used DTL for text emails that would break under that
>>>> behaviour.
>>>> New option to include sounds good to me."
>>>>
>>>>
>>>> Me again: In the long run, having {% include %} remove the trailing
>>>> newline seems like a more sensible default. For example, I wouldn't expect
>>>> this code to have a newline inserted between it:
>>>>
>>>>
>>>> {% include "foo.txt" %}
>>>> {% include "bar.txt" %}
>>>>
>>>>
>>>> An option for {% include %} seems superfluous given that if you were
>>>> writing
>>>>
>>>>
>>>> {% include "foo.txt" %}{% include "bar.txt" %}
>>>>
>>>>
>>>> now you can write the first thing which is much more intuitive.
>>>>
>>>>
>>>> How about a keep_trailing_newline TEMPLATES option for backwards
>>>> compatibility for those who don't want to adapt their templates for the
>>>> new
>>>> behavior? Jinja2 has that option.
>>>>
>>>> Carl replied: An engine option may be better than an option to {%
>>>> include %}, though it doesn't allow us to ensure that we strip the
>>>> newline in the specific case of attrs.
>>>>
>>>> How we default the engine option I guess just depends on how seriously
>>>> we take backwards compatibility. If we default it to strip and make people
>>>> add the config to preserve the old behavior, that's not really backwards
>>>> compatible. Historically (as seen in Malcolm's comment) we would choose to
>>>> err on the side of actual backwards compatibility in a case like this,
>>>> even
>>>> if it didn't result in the ideal future behavior. But the adaptation isn't
>>>> hard in this case, so I won't object if the choice is to break back-compat.
>>>>
>>>>
>>>> If it's not a per-include choice, of course, we have to break overall
>>>> back-compat to preserve form-attr-rendering back-compat.
>>>> ----
>>>>
>>>> What do you think?
>>>>
>>>> [0] https://github.com/django/django/pull/7769
>>>> [1] https://code.djangoproject.com/ticket/9198
>>>>
>>>
--
You received this message because you are subscribed to the Google Groups
"Django developers (Contributions to Django itself)" 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 https://groups.google.com/group/django-developers.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-developers/8e7c1d54-9352-49bc-b480-86258ac680d3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.