-
-
Save anonymous/098c076f626466dc3154e3a6da02d996 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/django/conf/project_template/project_name/settings.py-tpl b/django/conf/project_template/project_name/settings.py-tpl | |
index 7dfe186929..969b7404ec 100644 | |
--- a/django/conf/project_template/project_name/settings.py-tpl | |
+++ b/django/conf/project_template/project_name/settings.py-tpl | |
@@ -63,6 +63,7 @@ TEMPLATES = [ | |
'django.contrib.auth.context_processors.auth', | |
'django.contrib.messages.context_processors.messages', | |
], | |
+ 'keep_trailing_newline': False, | |
}, | |
}, | |
] | |
diff --git a/django/forms/renderers.py b/django/forms/renderers.py | |
index d0b3c3e2db..a976d540f4 100644 | |
--- a/django/forms/renderers.py | |
+++ b/django/forms/renderers.py | |
@@ -42,7 +42,9 @@ class EngineMixin(object): | |
'APP_DIRS': True, | |
'DIRS': [os.path.join(ROOT, self.backend.app_dirname)], | |
'NAME': 'djangoforms', | |
- 'OPTIONS': {}, | |
+ 'OPTIONS': { | |
+ 'keep_trailing_newline': False | |
+ }, | |
}) | |
diff --git a/django/template/engine.py b/django/template/engine.py | |
index 729c484a67..25e6078442 100644 | |
--- a/django/template/engine.py | |
+++ b/django/template/engine.py | |
@@ -18,7 +18,8 @@ class Engine(object): | |
def __init__(self, dirs=None, app_dirs=False, context_processors=None, | |
debug=False, loaders=None, string_if_invalid='', | |
- file_charset='utf-8', libraries=None, builtins=None, autoescape=True): | |
+ file_charset='utf-8', libraries=None, builtins=None, autoescape=True, | |
+ keep_trailing_newline=True): | |
if dirs is None: | |
dirs = [] | |
if context_processors is None: | |
@@ -47,10 +48,12 @@ class Engine(object): | |
self.string_if_invalid = string_if_invalid | |
self.file_charset = file_charset | |
self.libraries = libraries | |
+ self.keep_trailing_newline = keep_trailing_newline | |
self.template_libraries = self.get_template_libraries(libraries) | |
self.builtins = self.default_builtins + builtins | |
self.template_builtins = self.get_template_builtins(self.builtins) | |
+ | |
@staticmethod | |
@lru_cache.lru_cache() | |
def get_default(): | |
diff --git a/django/template/loader_tags.py b/django/template/loader_tags.py | |
index 2ed145c248..c3a6489adf 100644 | |
--- a/django/template/loader_tags.py | |
+++ b/django/template/loader_tags.py | |
@@ -207,9 +207,13 @@ class IncludeNode(Node): | |
for name, var in six.iteritems(self.extra_context) | |
} | |
if self.isolated_context: | |
- return template.render(context.new(values)) | |
- with context.push(**values): | |
- return template.render(context) | |
+ rendered_template = template.render(context.new(values)) | |
+ else: | |
+ with context.push(**values): | |
+ rendered_template = template.render(context) | |
+ if not context.template.engine.keep_trailing_newline: | |
+ rendered_template = rendered_template.rstrip('\r\n') | |
+ return rendered_template | |
except Exception as e: | |
if context.template.engine.debug: | |
raise | |
diff --git a/tests/forms_tests/widget_tests/base.py b/tests/forms_tests/widget_tests/base.py | |
index dbbea25d7a..490f033bad 100644 | |
--- a/tests/forms_tests/widget_tests/base.py | |
+++ b/tests/forms_tests/widget_tests/base.py | |
@@ -17,11 +17,12 @@ class WidgetTest(SimpleTestCase): | |
cls.renderers = [cls.django_renderer] + ([cls.jinja2_renderer] if cls.jinja2_renderer else []) | |
super(WidgetTest, cls).setUpClass() | |
- def check_html(self, widget, name, value, html='', attrs=None, **kwargs): | |
+ def check_html(self, widget, name, value, html='', attrs=None, strict=False, **kwargs): | |
+ assertEqual = self.assertEqual if strict else self.assertHTMLEqual | |
if self.jinja2_renderer: | |
output = widget.render(name, value, attrs=attrs, renderer=self.jinja2_renderer, **kwargs) | |
# Django escapes quotes with '"' while Jinja2 uses '"'. | |
- self.assertHTMLEqual(output.replace('"', '"'), html) | |
+ assertEqual(output.replace('"', '"'), html) | |
output = widget.render(name, value, attrs=attrs, renderer=self.django_renderer, **kwargs) | |
- self.assertHTMLEqual(output, html) | |
+ assertEqual(output, html) | |
diff --git a/tests/forms_tests/widget_tests/test_widget.py b/tests/forms_tests/widget_tests/test_widget.py | |
index 3911627a0c..bbf83fa327 100644 | |
--- a/tests/forms_tests/widget_tests/test_widget.py | |
+++ b/tests/forms_tests/widget_tests/test_widget.py | |
@@ -1,12 +1,18 @@ | |
from __future__ import unicode_literals | |
from django.forms import Widget | |
-from django.test import SimpleTestCase | |
+from django.forms.widgets import Input | |
+from .base import WidgetTest | |
-class WidgetTests(SimpleTestCase): | |
+ | |
+class WidgetTests(WidgetTest): | |
def test_value_omitted_from_data(self): | |
widget = Widget() | |
self.assertIs(widget.value_omitted_from_data({}, {}, 'field'), True) | |
self.assertIs(widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False) | |
+ | |
+ def test_no_trailing_newline_in_attrs(self): | |
+ self.check_html(Input(), 'name', 'value', strict=True, | |
+ html='<input type="None" name="name" value="value" />') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment