Fixed #18091 -- Non-ASCII templates break `django-admin.py startproject --template=TEMPLATE`.
Thanks to Claude Huchet and Tomáš Ehrlich for the patch.
This commit is contained in:
parent
20012b961e
commit
3afb5916b2
|
@ -8,6 +8,8 @@ import shutil
|
|||
import stat
|
||||
import sys
|
||||
import tempfile
|
||||
import codecs
|
||||
|
||||
try:
|
||||
from urllib.request import urlretrieve
|
||||
except ImportError: # Python 2
|
||||
|
@ -154,12 +156,12 @@ class TemplateCommand(BaseCommand):
|
|||
|
||||
# Only render the Python files, as we don't want to
|
||||
# accidentally render Django templates files
|
||||
with open(old_path, 'r') as template_file:
|
||||
with codecs.open(old_path, 'r', 'utf-8') as template_file:
|
||||
content = template_file.read()
|
||||
if filename.endswith(extensions) or filename in extra_files:
|
||||
template = Template(content)
|
||||
content = template.render(context)
|
||||
with open(new_path, 'w') as new_file:
|
||||
with codecs.open(new_path, 'w', 'utf-8') as new_file:
|
||||
new_file.write(content)
|
||||
|
||||
if self.verbosity >= 2:
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Some non-ASCII text for testing ticket #18091:
|
||||
üäö €
|
|
@ -1573,3 +1573,16 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
|
|||
self.assertOutput(err, "Destination directory '%s' does not exist, please create it first." % testproject_dir)
|
||||
self.assertFalse(os.path.exists(testproject_dir))
|
||||
|
||||
|
||||
def test_custom_project_template_with_non_ascii_templates(self):
|
||||
"Ticket 18091: Make sure the startproject management command is able to render templates with non-ASCII content"
|
||||
template_path = os.path.join(test_dir, 'admin_scripts', 'custom_templates', 'project_template')
|
||||
args = ['startproject', '--template', template_path, '--extension=txt', 'customtestproject']
|
||||
testproject_dir = os.path.join(test_dir, 'customtestproject')
|
||||
|
||||
out, err = self.run_django_admin(args)
|
||||
self.addCleanup(shutil.rmtree, testproject_dir)
|
||||
self.assertNoOutput(err)
|
||||
self.assertTrue(os.path.isdir(testproject_dir))
|
||||
self.assertEqual(open(os.path.join(testproject_dir, 'ticket-18091-non-ascii-template.txt')).read(),
|
||||
'Some non-ASCII text for testing ticket #18091:\n\xc3\xbc\xc3\xa4\xc3\xb6 \xe2\x82\xac\n')
|
||||
|
|
Loading…
Reference in New Issue