diff --git a/django/contrib/staticfiles/storage.py b/django/contrib/staticfiles/storage.py index ede04fc2a57..fd114e45d57 100644 --- a/django/contrib/staticfiles/storage.py +++ b/django/contrib/staticfiles/storage.py @@ -292,7 +292,7 @@ class ManifestFilesMixin(HashedFilesMixin): def read_manifest(self): try: with self.open(self.manifest_name) as manifest: - return manifest.read() + return manifest.read().decode('utf-8') except IOError: return None @@ -319,7 +319,8 @@ class ManifestFilesMixin(HashedFilesMixin): payload = {'paths': self.hashed_files, 'version': self.manifest_version} if self.exists(self.manifest_name): self.delete(self.manifest_name) - self._save(self.manifest_name, ContentFile(json.dumps(payload))) + contents = json.dumps(payload).encode('utf-8') + self._save(self.manifest_name, ContentFile(contents)) class _MappingCache(object): diff --git a/tests/staticfiles_tests/tests.py b/tests/staticfiles_tests/tests.py index 21ecf84bbc3..4d2ba30c8c4 100644 --- a/tests/staticfiles_tests/tests.py +++ b/tests/staticfiles_tests/tests.py @@ -662,6 +662,11 @@ class TestCollectionManifestStorage(TestHashedFiles, BaseCollectionTestCase, storage.staticfiles_storage.manifest_version, force_text(manifest_content)) + def test_parse_cache(self): + hashed_files = storage.staticfiles_storage.hashed_files + manifest = storage.staticfiles_storage.load_manifest() + self.assertEqual(hashed_files, manifest) + # we set DEBUG to False here since the template tag wouldn't work otherwise @override_settings(**dict(