django-camomilla-cms 6.0.0b18__tar.gz → 6.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. django_camomilla_cms-6.0.1/PKG-INFO +133 -0
  2. django_camomilla_cms-6.0.1/README.md +102 -0
  3. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/__init__.py +1 -1
  4. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/page.py +1 -8
  5. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/base/__init__.py +9 -5
  6. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/settings.py +15 -2
  7. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templatetags/model_extras.py +8 -4
  8. django_camomilla_cms-6.0.1/camomilla/theme/__init__.py +1 -0
  9. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/admin/pages.py +20 -0
  10. django_camomilla_cms-6.0.1/camomilla/utils/templates.py +53 -0
  11. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/base/__init__.py +4 -2
  12. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/pagination.py +1 -1
  13. django_camomilla_cms-6.0.1/django_camomilla_cms.egg-info/PKG-INFO +133 -0
  14. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/django_camomilla_cms.egg-info/SOURCES.txt +1 -0
  15. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/django_camomilla_cms.egg-info/requires.txt +3 -1
  16. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/pyproject.toml +4 -2
  17. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/setup.py +1 -1
  18. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/fixtures/__init__.py +3 -6
  19. django_camomilla_cms-6.0.1/tests/test_admin_page_form.py +63 -0
  20. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_camomilla_filters.py +7 -3
  21. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_media.py +54 -15
  22. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_menu.py +33 -18
  23. django_camomilla_cms-6.0.1/tests/test_model_api.py +113 -0
  24. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_model_api_permissions.py +7 -2
  25. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_model_api_register.py +118 -156
  26. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_pages.py +139 -131
  27. django_camomilla_cms-6.0.1/tests/test_templates_context.py +149 -0
  28. django_camomilla_cms-6.0.1/tests/test_utils.py +56 -0
  29. django_camomilla_cms-6.0.0b18/PKG-INFO +0 -79
  30. django_camomilla_cms-6.0.0b18/README.md +0 -50
  31. django_camomilla_cms-6.0.0b18/camomilla/theme/__init__.py +0 -1
  32. django_camomilla_cms-6.0.0b18/camomilla/utils/templates.py +0 -33
  33. django_camomilla_cms-6.0.0b18/django_camomilla_cms.egg-info/PKG-INFO +0 -79
  34. django_camomilla_cms-6.0.0b18/tests/test_model_api.py +0 -68
  35. django_camomilla_cms-6.0.0b18/tests/test_templates_context.py +0 -111
  36. django_camomilla_cms-6.0.0b18/tests/test_utils.py +0 -86
  37. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/LICENSE +0 -0
  38. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/MANIFEST.in +0 -0
  39. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/apps.py +0 -0
  40. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/authentication.py +0 -0
  41. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/context_processors.py +0 -0
  42. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/contrib/__init__.py +0 -0
  43. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/contrib/modeltranslation/__init__.py +0 -0
  44. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/contrib/modeltranslation/hvad_migration.py +0 -0
  45. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/defaults.py +0 -0
  46. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/dynamic_pages_urls.py +0 -0
  47. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/exceptions.py +0 -0
  48. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/fields/__init__.py +0 -0
  49. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/fields/json.py +0 -0
  50. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/management/__init__.py +0 -0
  51. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/management/commands/__init__.py +0 -0
  52. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/management/commands/regenerate_thumbnails.py +0 -0
  53. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/managers/__init__.py +0 -0
  54. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/managers/pages.py +0 -0
  55. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/model_api.py +0 -0
  56. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/__init__.py +0 -0
  57. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/article.py +0 -0
  58. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/content.py +0 -0
  59. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/media.py +0 -0
  60. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/menu.py +0 -0
  61. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/models/mixins/__init__.py +0 -0
  62. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/openapi/__init__.py +0 -0
  63. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/openapi/schema.py +0 -0
  64. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/parsers.py +0 -0
  65. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/permissions.py +0 -0
  66. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/redirects.py +0 -0
  67. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/__init__.py +0 -0
  68. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/article.py +0 -0
  69. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/content_type.py +0 -0
  70. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/fields/__init__.py +0 -0
  71. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/fields/file.py +0 -0
  72. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/fields/related.py +0 -0
  73. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/media.py +0 -0
  74. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/menu.py +0 -0
  75. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/__init__.py +0 -0
  76. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/fields.py +0 -0
  77. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/filter_fields.py +0 -0
  78. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/json.py +0 -0
  79. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/language.py +0 -0
  80. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/nesting.py +0 -0
  81. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/optimize.py +0 -0
  82. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/ordering.py +0 -0
  83. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/page.py +0 -0
  84. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/mixins/translation.py +0 -0
  85. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/page.py +0 -0
  86. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/user.py +0 -0
  87. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/utils.py +0 -0
  88. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/serializers/validators.py +0 -0
  89. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/sitemap.py +0 -0
  90. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/storages/__init__.py +0 -0
  91. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/storages/default.py +0 -0
  92. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/storages/optimize.py +0 -0
  93. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/storages/overwrite.py +0 -0
  94. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/admin/camomilla/page/change_form.html +0 -0
  95. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/defaults/articles/default.html +0 -0
  96. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/defaults/base.html +0 -0
  97. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/defaults/pages/default.html +0 -0
  98. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/defaults/parts/langswitch.html +0 -0
  99. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/defaults/parts/menu.html +0 -0
  100. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates/defaults/widgets/media_select_multiple.html +0 -0
  101. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates_context/__init__.py +0 -0
  102. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates_context/autodiscover.py +0 -0
  103. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templates_context/rendering.py +0 -0
  104. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templatetags/__init__.py +0 -0
  105. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templatetags/camomilla_filters.py +0 -0
  106. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/templatetags/menus.py +0 -0
  107. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/admin/__init__.py +0 -0
  108. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/admin/translations.py +0 -0
  109. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/apps.py +0 -0
  110. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/static/admin/css/responsive.css +0 -0
  111. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/static/admin/img/favicon.ico +0 -0
  112. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/static/admin/img/logo.svg +0 -0
  113. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/templates/admin/base.html +0 -0
  114. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/theme/templates/rosetta/base.html +0 -0
  115. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/translation.py +0 -0
  116. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/urls.py +0 -0
  117. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/__init__.py +0 -0
  118. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/getters.py +0 -0
  119. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/normalization.py +0 -0
  120. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/query_parser.py +0 -0
  121. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/seo.py +0 -0
  122. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/setters.py +0 -0
  123. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/utils/translation.py +0 -0
  124. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/__init__.py +0 -0
  125. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/articles.py +0 -0
  126. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/contents.py +0 -0
  127. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/decorators.py +0 -0
  128. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/languages.py +0 -0
  129. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/medias.py +0 -0
  130. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/menus.py +0 -0
  131. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/__init__.py +0 -0
  132. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/bulk_actions.py +0 -0
  133. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/language.py +0 -0
  134. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/optimize.py +0 -0
  135. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/ordering.py +0 -0
  136. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/mixins/permissions.py +0 -0
  137. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/pages.py +0 -0
  138. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/tags.py +0 -0
  139. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/camomilla/views/users.py +0 -0
  140. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/django_camomilla_cms.egg-info/dependency_links.txt +0 -0
  141. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/django_camomilla_cms.egg-info/top_level.txt +0 -0
  142. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/setup.cfg +0 -0
  143. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/__init__.py +0 -0
  144. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_api.py +0 -0
  145. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_models.py +0 -0
  146. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/test_query_parser.py +0 -0
  147. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/utils/__init__.py +0 -0
  148. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/utils/api.py +0 -0
  149. {django_camomilla_cms-6.0.0b18 → django_camomilla_cms-6.0.1}/tests/utils/media.py +0 -0
@@ -0,0 +1,133 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-camomilla-cms
3
+ Version: 6.0.1
4
+ Summary: Django powered cms
5
+ Author-email: Lotrèk <dimmitutto@lotrek.it>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/camomillacms/camomilla-core
8
+ Keywords: cms,django,api cms
9
+ Classifier: Environment :: Web Environment
10
+ Classifier: Framework :: Django
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3
14
+ Requires-Python: <=3.13,>=3.8
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: django-modeltranslation<=0.18.12,>=0.18.7
18
+ Requires-Dist: djsuperadmin<1.0.0,>=0.9
19
+ Requires-Dist: djangorestframework<=3.14.0,>=3.10.0
20
+ Requires-Dist: django-structured-json-field>=0.4.2
21
+ Requires-Dist: Pillow>=10.0.0
22
+ Requires-Dist: django-admin-interface<1.0.0,>=0.26.0
23
+ Requires-Dist: django-ckeditor<7.0.0,>=5.7.1
24
+ Requires-Dist: django-tinymce<5.0.0,>=4.1.0
25
+ Requires-Dist: python-magic<0.5,>=0.4
26
+ Requires-Dist: Django<6,>=3.2
27
+ Requires-Dist: django_jsonform>=2.23
28
+ Requires-Dist: inflection>=0.5.1
29
+ Requires-Dist: uritemplate>=4.1.0
30
+ Dynamic: license-file
31
+
32
+ [![PyPI](https://img.shields.io/pypi/v/django-camomilla-cms?style=flat-square)](https://pypi.org/project/django-camomilla-cms)
33
+ [![Django Versions](https://img.shields.io/badge/django-3.2%20%7C%204.2%20%7C%205.1-blue?style=flat-square)](https://www.djangoproject.com/)
34
+ [![Build](https://img.shields.io/github/actions/workflow/status/camomillacms/camomilla-core/ci.yml?branch=master&style=flat-square)](https://github.com/camomillacms/camomilla-core/actions)
35
+ [![Last Commit](https://img.shields.io/github/last-commit/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/commits/master)
36
+ [![Contributors](https://img.shields.io/github/contributors/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/graphs/contributors)
37
+ [![Open Issues](https://img.shields.io/github/issues/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/issues)
38
+ [![Codecov](https://img.shields.io/codecov/c/github/camomillacms/camomilla-core?style=flat-square)](https://app.codecov.io/gh/camomillacms/camomilla-core/tree/master/camomilla)
39
+ [![License](https://img.shields.io/github/license/camomillacms/camomilla-core?style=flat-square)](./LICENSE)
40
+
41
+
42
+ <br>
43
+ <br>
44
+ <br>
45
+ <br>
46
+ <div align="center">
47
+ <picture>
48
+ <source media="(prefers-color-scheme: dark)" srcset="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-dark.svg?v=1">
49
+ <source media="(prefers-color-scheme: light)" srcset="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-light.svg?v=1">
50
+ <img alt="Fallback image description" src="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-light.svg?v=1" style="width: 250px; height: auto;">
51
+ </picture>
52
+ </div>
53
+ <h3 align="center"">Our beloved Django CMS</h3>
54
+ <br>
55
+
56
+ ## ⭐️ Features
57
+
58
+ <!-- Highlight some of the features your module provide here -->
59
+
60
+ - 🧘‍♀️ &nbsp;Built on top of the django framework
61
+ - 🥨 &nbsp;Beaked page abstract model to let you manage everything you need as a page.
62
+ - 🏞️ &nbsp;Optimized media management with autoresize
63
+ - 👯 &nbsp;Enable relations inside django JSONFields
64
+ - ⚡️ &nbsp;AutoCreate api endpoints from models
65
+ - 🚧 &nbsp;Enable JsonSchema directly in models endpoints
66
+
67
+ Camomilla is a Django CMS that allows you to create and manage your website's content with ease. It provides a simple and intuitive interface for managing pages, media, and other content types. Camomilla is built on top of the Django framework, which means it inherits all the features and benefits of Django framework.
68
+ We try to continuously improve Camomilla by adding new features and fixing bugs. You can check the [CHANGELOG](./CHANGELOG.md) to see what has been added in the latest releases.
69
+
70
+ ## 📦 Quick Start
71
+
72
+ Here you can find some quick setup instructions to get started with Camomilla. For more detailed information, please refer to the [documentation](https://camomillacms.github.io/camomilla-core/).
73
+
74
+ > [!TIP]
75
+ >
76
+ > #### Env Virtualization 👾
77
+ >
78
+ > Use a virtualenv to isolate your project's dependencies from the system's python installation before starting. Check out [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/) for more information.
79
+
80
+ Install django-camomilla-cms and django from pip
81
+
82
+ ```bash
83
+ $ pip install django
84
+ $ pip install django-camomilla-cms==6.0.0
85
+ ```
86
+
87
+ Create a new django project
88
+
89
+ ```bash
90
+ $ django-admin startproject <project_name>
91
+ $ cd <project_name>
92
+ ```
93
+
94
+ Create a dedicated folder for camomilla migrations
95
+
96
+ ```bash
97
+ $ mkdir -p camomilla_migrations
98
+ $ touch camomilla_migrations.__init__.py
99
+ ```
100
+
101
+ Create migrations and prepare the database
102
+
103
+ ```bash
104
+ $ python manage.py makemigrations camomilla
105
+ $ python manage.py migrate
106
+ ```
107
+
108
+ Add camomilla and camomilla dependencies to your project's INSTALLED_APPS
109
+
110
+ ```python
111
+ # <project_name>/settings.py
112
+
113
+ INSTALLED_APPS = [
114
+ ...
115
+ 'camomilla', # always needed
116
+ 'camomilla.theme', # needed to customize admin interface
117
+ 'djsuperadmin', # needed if you whant to use djsuperadmin for contents
118
+ 'modeltranslation', # needed if your website is multilanguage (can be added later)
119
+ 'rest_framework', # always needed
120
+ 'rest_framework.authtoken', # always needed
121
+ ...
122
+ ]
123
+ ```
124
+
125
+ Run the server
126
+
127
+ ```bash
128
+ $ python manage.py runserver
129
+ ```
130
+
131
+ ## 🧑‍💻 How to Contribute
132
+
133
+ We welcome contributions to Camomilla! If you want to contribute, please read our [contributing guide](./CONTRIBUTING.md) for more information on how to get started.
@@ -0,0 +1,102 @@
1
+ [![PyPI](https://img.shields.io/pypi/v/django-camomilla-cms?style=flat-square)](https://pypi.org/project/django-camomilla-cms)
2
+ [![Django Versions](https://img.shields.io/badge/django-3.2%20%7C%204.2%20%7C%205.1-blue?style=flat-square)](https://www.djangoproject.com/)
3
+ [![Build](https://img.shields.io/github/actions/workflow/status/camomillacms/camomilla-core/ci.yml?branch=master&style=flat-square)](https://github.com/camomillacms/camomilla-core/actions)
4
+ [![Last Commit](https://img.shields.io/github/last-commit/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/commits/master)
5
+ [![Contributors](https://img.shields.io/github/contributors/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/graphs/contributors)
6
+ [![Open Issues](https://img.shields.io/github/issues/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/issues)
7
+ [![Codecov](https://img.shields.io/codecov/c/github/camomillacms/camomilla-core?style=flat-square)](https://app.codecov.io/gh/camomillacms/camomilla-core/tree/master/camomilla)
8
+ [![License](https://img.shields.io/github/license/camomillacms/camomilla-core?style=flat-square)](./LICENSE)
9
+
10
+
11
+ <br>
12
+ <br>
13
+ <br>
14
+ <br>
15
+ <div align="center">
16
+ <picture>
17
+ <source media="(prefers-color-scheme: dark)" srcset="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-dark.svg?v=1">
18
+ <source media="(prefers-color-scheme: light)" srcset="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-light.svg?v=1">
19
+ <img alt="Fallback image description" src="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-light.svg?v=1" style="width: 250px; height: auto;">
20
+ </picture>
21
+ </div>
22
+ <h3 align="center"">Our beloved Django CMS</h3>
23
+ <br>
24
+
25
+ ## ⭐️ Features
26
+
27
+ <!-- Highlight some of the features your module provide here -->
28
+
29
+ - 🧘‍♀️ &nbsp;Built on top of the django framework
30
+ - 🥨 &nbsp;Beaked page abstract model to let you manage everything you need as a page.
31
+ - 🏞️ &nbsp;Optimized media management with autoresize
32
+ - 👯 &nbsp;Enable relations inside django JSONFields
33
+ - ⚡️ &nbsp;AutoCreate api endpoints from models
34
+ - 🚧 &nbsp;Enable JsonSchema directly in models endpoints
35
+
36
+ Camomilla is a Django CMS that allows you to create and manage your website's content with ease. It provides a simple and intuitive interface for managing pages, media, and other content types. Camomilla is built on top of the Django framework, which means it inherits all the features and benefits of Django framework.
37
+ We try to continuously improve Camomilla by adding new features and fixing bugs. You can check the [CHANGELOG](./CHANGELOG.md) to see what has been added in the latest releases.
38
+
39
+ ## 📦 Quick Start
40
+
41
+ Here you can find some quick setup instructions to get started with Camomilla. For more detailed information, please refer to the [documentation](https://camomillacms.github.io/camomilla-core/).
42
+
43
+ > [!TIP]
44
+ >
45
+ > #### Env Virtualization 👾
46
+ >
47
+ > Use a virtualenv to isolate your project's dependencies from the system's python installation before starting. Check out [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/) for more information.
48
+
49
+ Install django-camomilla-cms and django from pip
50
+
51
+ ```bash
52
+ $ pip install django
53
+ $ pip install django-camomilla-cms==6.0.0
54
+ ```
55
+
56
+ Create a new django project
57
+
58
+ ```bash
59
+ $ django-admin startproject <project_name>
60
+ $ cd <project_name>
61
+ ```
62
+
63
+ Create a dedicated folder for camomilla migrations
64
+
65
+ ```bash
66
+ $ mkdir -p camomilla_migrations
67
+ $ touch camomilla_migrations.__init__.py
68
+ ```
69
+
70
+ Create migrations and prepare the database
71
+
72
+ ```bash
73
+ $ python manage.py makemigrations camomilla
74
+ $ python manage.py migrate
75
+ ```
76
+
77
+ Add camomilla and camomilla dependencies to your project's INSTALLED_APPS
78
+
79
+ ```python
80
+ # <project_name>/settings.py
81
+
82
+ INSTALLED_APPS = [
83
+ ...
84
+ 'camomilla', # always needed
85
+ 'camomilla.theme', # needed to customize admin interface
86
+ 'djsuperadmin', # needed if you whant to use djsuperadmin for contents
87
+ 'modeltranslation', # needed if your website is multilanguage (can be added later)
88
+ 'rest_framework', # always needed
89
+ 'rest_framework.authtoken', # always needed
90
+ ...
91
+ ]
92
+ ```
93
+
94
+ Run the server
95
+
96
+ ```bash
97
+ $ python manage.py runserver
98
+ ```
99
+
100
+ ## 🧑‍💻 How to Contribute
101
+
102
+ We welcome contributions to Camomilla! If you want to contribute, please read our [contributing guide](./CONTRIBUTING.md) for more information on how to get started.
@@ -1,4 +1,4 @@
1
- __version__ = "6.0.0-beta.18"
1
+ __version__ = "6.0.1"
2
2
 
3
3
 
4
4
  def get_core_apps():
@@ -10,7 +10,6 @@ from django.http import Http404, HttpRequest
10
10
  from django.shortcuts import redirect
11
11
  from django.urls import NoReverseMatch, reverse
12
12
  from django.utils import timezone
13
- from django.utils.functional import lazy
14
13
  from django.utils.text import slugify
15
14
  from django.utils.translation import gettext_lazy as _
16
15
  from django.utils.translation import get_language
@@ -24,7 +23,6 @@ from camomilla.utils import (
24
23
  lang_fallback_query,
25
24
  set_nofallbacks,
26
25
  url_lang_decompose,
27
- get_all_templates_files,
28
26
  )
29
27
  from camomilla.utils.getters import pointed_getter
30
28
  from camomilla import settings
@@ -33,10 +31,6 @@ from django.conf import settings as django_settings
33
31
  from modeltranslation.utils import build_localized_fieldname
34
32
 
35
33
 
36
- def GET_TEMPLATE_CHOICES():
37
- return [(t, t) for t in get_all_templates_files()]
38
-
39
-
40
34
  class UrlRedirect(models.Model):
41
35
  language_code = models.CharField(max_length=10, null=True)
42
36
  from_url = models.CharField(max_length=400)
@@ -233,7 +227,7 @@ class AbstractPage(SeoMixin, MetaMixin, models.Model, metaclass=PageBase):
233
227
  date_created = models.DateTimeField(auto_now_add=True)
234
228
  date_updated_at = models.DateTimeField(auto_now=True)
235
229
  breadcrumbs_title = models.CharField(max_length=128, null=True, blank=True)
236
- template = models.CharField(max_length=500, null=True, blank=True, choices=[])
230
+ template = models.CharField(max_length=500, null=True, blank=True)
237
231
  template_data = models.JSONField(default=dict, null=False, blank=True)
238
232
  ordering = models.PositiveIntegerField(default=0, blank=False, null=False)
239
233
  parent_page = models.ForeignKey(
@@ -276,7 +270,6 @@ class AbstractPage(SeoMixin, MetaMixin, models.Model, metaclass=PageBase):
276
270
 
277
271
  def __init__(self, *args, **kwargs):
278
272
  super(AbstractPage, self).__init__(*args, **kwargs)
279
- self._meta.get_field("template").choices = lazy(GET_TEMPLATE_CHOICES, list)()
280
273
 
281
274
  def __str__(self) -> str:
282
275
  return "(%s) %s" % (self.__class__.__name__, self.title or self.permalink)
@@ -9,18 +9,22 @@ from camomilla.serializers.mixins import (
9
9
  FieldsOverrideMixin,
10
10
  TranslationsMixin,
11
11
  )
12
+ from camomilla.settings import ENABLE_TRANSLATIONS
12
13
 
13
-
14
- class BaseModelSerializer(
14
+ bases = (
15
15
  SetupEagerLoadingMixin,
16
16
  NestMixin,
17
17
  FilterFieldsMixin,
18
18
  FieldsOverrideMixin,
19
19
  JSONFieldPatchMixin,
20
20
  OrderingMixin,
21
- TranslationsMixin,
22
- serializers.ModelSerializer,
23
- ):
21
+ )
22
+
23
+ if ENABLE_TRANSLATIONS:
24
+ bases += (TranslationsMixin,)
25
+
26
+
27
+ class BaseModelSerializer(*bases, serializers.ModelSerializer):
24
28
  """
25
29
  This is the base serializer for all the models.
26
30
  It adds support for:
@@ -88,8 +88,15 @@ API_TRANSLATION_ACCESSOR = pointed_getter(
88
88
  )
89
89
 
90
90
  REGISTERED_TEMPLATES_APPS = pointed_getter(
91
- django_settings,
92
- "CAMOMILLA.RENDER.REGISTERED_TEMPLATES_APPS", None
91
+ django_settings, "CAMOMILLA.RENDER.REGISTERED_TEMPLATES_APPS", None
92
+ )
93
+
94
+ INTEGRATIONS_ASTRO_ENABLE = pointed_getter(
95
+ django_settings, "CAMOMILLA.INTEGRATIONS.ASTRO.ENABLE", False
96
+ )
97
+
98
+ INTEGRATIONS_ASTRO_URL = pointed_getter(
99
+ django_settings, "CAMOMILLA.INTEGRATIONS.ASTRO.URL", ""
93
100
  )
94
101
 
95
102
  DEBUG = pointed_getter(django_settings, "CAMOMILLA.DEBUG", django_settings.DEBUG)
@@ -114,6 +121,12 @@ DEBUG = pointed_getter(django_settings, "CAMOMILLA.DEBUG", django_settings.DEBUG
114
121
  # "STRUCTURED_FIELD": {
115
122
  # "CACHE_ENABLED": True
116
123
  # }
124
+ # "INTEGRATIONS": {
125
+ # "ASTRO": {
126
+ # "ENABLE": True,
127
+ # "URL": "http://localhost:4321"
128
+ # }
129
+ # }
117
130
  # "API": {"NESTING_DEPTH": 10, "TRANSLATION_ACCESSOR": "translations"},
118
131
  # "DEBUG": False
119
132
  # }
@@ -42,13 +42,17 @@ def pretty_dict(data, indent_level=0):
42
42
  if isinstance(item, dict):
43
43
  result.append(pretty_dict(item, indent_level + 1))
44
44
  else:
45
- result.append(f"{indent} {json.dumps(item, default=custom_json_serializer)},")
45
+ result.append(
46
+ f"{indent} {json.dumps(item, default=custom_json_serializer)},"
47
+ )
46
48
  result.append(f"{indent}],")
47
49
 
48
50
  else:
49
- result.append(f"{indent}'{key}': {json.dumps(value, default=custom_json_serializer)},")
51
+ result.append(
52
+ f"{indent}'{key}': {json.dumps(value, default=custom_json_serializer)},"
53
+ )
50
54
 
51
- return "\n".join(result).rstrip(',')
55
+ return "\n".join(result).rstrip(",")
52
56
 
53
57
 
54
58
  @register.filter
@@ -67,7 +71,7 @@ def to_pretty_dict(instance):
67
71
  highlighted = re.sub(
68
72
  r"(&#x27;)([^&#]+?)(&#x27;):",
69
73
  r"<span style='color:#df3079'>'\2'</span>:",
70
- escaped
74
+ escaped,
71
75
  )
72
76
 
73
77
  return mark_safe(f"<pre>{highlighted}</pre>")
@@ -0,0 +1 @@
1
+ __version__ = "6.0.1"
@@ -3,6 +3,8 @@ from camomilla import settings
3
3
  from .translations import TranslationAwareModelAdmin
4
4
  from camomilla.models import UrlNode
5
5
 
6
+ from camomilla.utils import get_templates
7
+
6
8
 
7
9
  class AbstractPageModelFormMeta(forms.models.ModelFormMetaclass):
8
10
  def __new__(mcs, name, bases, attrs):
@@ -22,6 +24,12 @@ class AbstractPageModelFormMeta(forms.models.ModelFormMetaclass):
22
24
  class AbstractPageModelForm(
23
25
  forms.models.BaseModelForm, metaclass=AbstractPageModelFormMeta
24
26
  ):
27
+ def __init__(self, *args, **kwargs):
28
+ request = kwargs.pop("request", None)
29
+ super().__init__(*args, **kwargs)
30
+ templates = [(t, t) for t in get_templates(request)]
31
+ templates.insert(0, ("", "---------"))
32
+ self.fields["template"] = forms.ChoiceField(choices=templates)
25
33
 
26
34
  def get_initial_for_field(self, field, field_name):
27
35
  if field_name in UrlNode.LANG_PERMALINK_FIELDS:
@@ -43,4 +51,16 @@ class AbstractPageModelForm(
43
51
 
44
52
  class AbstractPageAdmin(TranslationAwareModelAdmin):
45
53
  form = AbstractPageModelForm
54
+
55
+ def get_form(self, request, obj=None, **kwargs):
56
+ kwargs["form"] = self.form
57
+ form = super().get_form(request, obj, **kwargs)
58
+
59
+ class FormWithRequest(form):
60
+ def __new__(cls, *args, **kwargs_):
61
+ kwargs_["request"] = request
62
+ return form(*args, **kwargs_)
63
+
64
+ return FormWithRequest
65
+
46
66
  change_form_template = "admin/camomilla/page/change_form.html"
@@ -0,0 +1,53 @@
1
+ from pathlib import Path
2
+ from typing import Sequence
3
+ import requests
4
+
5
+ from django import template as django_template
6
+ from os.path import relpath
7
+ from camomilla.settings import (
8
+ REGISTERED_TEMPLATES_APPS,
9
+ INTEGRATIONS_ASTRO_ENABLE,
10
+ INTEGRATIONS_ASTRO_URL,
11
+ )
12
+
13
+
14
+ def get_templates(request=None) -> Sequence[str]:
15
+ files = []
16
+
17
+ for engine in django_template.loader.engines.all():
18
+
19
+ if REGISTERED_TEMPLATES_APPS:
20
+ dirs = [
21
+ d
22
+ for d in engine.template_dirs
23
+ if any(app in str(d) for app in REGISTERED_TEMPLATES_APPS)
24
+ ]
25
+ else:
26
+ # Exclude pip installed site package template dirs
27
+ dirs = [
28
+ d
29
+ for d in engine.template_dirs
30
+ if "site-packages" not in str(d) or "camomilla" in str(d)
31
+ ]
32
+
33
+ for d in dirs:
34
+ base = Path(d)
35
+ files.extend(relpath(f, d) for f in base.rglob("*.html"))
36
+
37
+ if INTEGRATIONS_ASTRO_ENABLE and request is not None:
38
+ try:
39
+ response = requests.get(
40
+ INTEGRATIONS_ASTRO_URL + "/api/templates",
41
+ cookies={
42
+ "sessionid": request.COOKIES.get("sessionid"),
43
+ "csrftoken": request.COOKIES.get("csrftoken"),
44
+ },
45
+ )
46
+ if response.status_code == 200:
47
+ astro_templates = response.json()
48
+ for template in astro_templates:
49
+ files.append(template)
50
+ except:
51
+ pass
52
+
53
+ return files
@@ -4,6 +4,8 @@ from ..mixins import (
4
4
  OrderingMixin,
5
5
  CamomillaBasePermissionMixin,
6
6
  )
7
+ from camomilla.serializers.mixins import TranslationsMixin
8
+ from camomilla.utils.translation import plain_to_nest
7
9
  from rest_framework import viewsets
8
10
  from rest_framework.metadata import SimpleMetadata
9
11
  from structured.contrib.restframework import StructuredJSONField
@@ -29,8 +31,8 @@ class BaseViewMetadata(SimpleMetadata):
29
31
 
30
32
  def get_serializer_info(self, serializer):
31
33
  info = super().get_serializer_info(serializer)
32
- if hasattr(serializer, "plain_to_nest"):
33
- info.update(serializer.plain_to_nest(info))
34
+ if isinstance(serializer, TranslationsMixin) and serializer.is_translatable:
35
+ info.update(plain_to_nest(info, serializer.translation_fields))
34
36
  return info
35
37
 
36
38
 
@@ -86,7 +86,7 @@ class PaginateStackMixin:
86
86
  if "sqlite" in settings.DATABASES["default"]["ENGINE"]:
87
87
  filter_statement = Q()
88
88
  for field in search_fields:
89
- filter_statement |= Q(**{field + '__icontains': search_string})
89
+ filter_statement |= Q(**{field + "__icontains": search_string})
90
90
  return list_handler.filter(filter_statement)
91
91
  else:
92
92
  return list_handler.annotate(
@@ -0,0 +1,133 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-camomilla-cms
3
+ Version: 6.0.1
4
+ Summary: Django powered cms
5
+ Author-email: Lotrèk <dimmitutto@lotrek.it>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/camomillacms/camomilla-core
8
+ Keywords: cms,django,api cms
9
+ Classifier: Environment :: Web Environment
10
+ Classifier: Framework :: Django
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python
13
+ Classifier: Programming Language :: Python :: 3
14
+ Requires-Python: <=3.13,>=3.8
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: django-modeltranslation<=0.18.12,>=0.18.7
18
+ Requires-Dist: djsuperadmin<1.0.0,>=0.9
19
+ Requires-Dist: djangorestframework<=3.14.0,>=3.10.0
20
+ Requires-Dist: django-structured-json-field>=0.4.2
21
+ Requires-Dist: Pillow>=10.0.0
22
+ Requires-Dist: django-admin-interface<1.0.0,>=0.26.0
23
+ Requires-Dist: django-ckeditor<7.0.0,>=5.7.1
24
+ Requires-Dist: django-tinymce<5.0.0,>=4.1.0
25
+ Requires-Dist: python-magic<0.5,>=0.4
26
+ Requires-Dist: Django<6,>=3.2
27
+ Requires-Dist: django_jsonform>=2.23
28
+ Requires-Dist: inflection>=0.5.1
29
+ Requires-Dist: uritemplate>=4.1.0
30
+ Dynamic: license-file
31
+
32
+ [![PyPI](https://img.shields.io/pypi/v/django-camomilla-cms?style=flat-square)](https://pypi.org/project/django-camomilla-cms)
33
+ [![Django Versions](https://img.shields.io/badge/django-3.2%20%7C%204.2%20%7C%205.1-blue?style=flat-square)](https://www.djangoproject.com/)
34
+ [![Build](https://img.shields.io/github/actions/workflow/status/camomillacms/camomilla-core/ci.yml?branch=master&style=flat-square)](https://github.com/camomillacms/camomilla-core/actions)
35
+ [![Last Commit](https://img.shields.io/github/last-commit/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/commits/master)
36
+ [![Contributors](https://img.shields.io/github/contributors/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/graphs/contributors)
37
+ [![Open Issues](https://img.shields.io/github/issues/camomillacms/camomilla-core?style=flat-square)](https://github.com/camomillacms/camomilla-core/issues)
38
+ [![Codecov](https://img.shields.io/codecov/c/github/camomillacms/camomilla-core?style=flat-square)](https://app.codecov.io/gh/camomillacms/camomilla-core/tree/master/camomilla)
39
+ [![License](https://img.shields.io/github/license/camomillacms/camomilla-core?style=flat-square)](./LICENSE)
40
+
41
+
42
+ <br>
43
+ <br>
44
+ <br>
45
+ <br>
46
+ <div align="center">
47
+ <picture>
48
+ <source media="(prefers-color-scheme: dark)" srcset="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-dark.svg?v=1">
49
+ <source media="(prefers-color-scheme: light)" srcset="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-light.svg?v=1">
50
+ <img alt="Fallback image description" src="https://camomillacms.github.io/camomilla-core/images/camomilla-logo-light.svg?v=1" style="width: 250px; height: auto;">
51
+ </picture>
52
+ </div>
53
+ <h3 align="center"">Our beloved Django CMS</h3>
54
+ <br>
55
+
56
+ ## ⭐️ Features
57
+
58
+ <!-- Highlight some of the features your module provide here -->
59
+
60
+ - 🧘‍♀️ &nbsp;Built on top of the django framework
61
+ - 🥨 &nbsp;Beaked page abstract model to let you manage everything you need as a page.
62
+ - 🏞️ &nbsp;Optimized media management with autoresize
63
+ - 👯 &nbsp;Enable relations inside django JSONFields
64
+ - ⚡️ &nbsp;AutoCreate api endpoints from models
65
+ - 🚧 &nbsp;Enable JsonSchema directly in models endpoints
66
+
67
+ Camomilla is a Django CMS that allows you to create and manage your website's content with ease. It provides a simple and intuitive interface for managing pages, media, and other content types. Camomilla is built on top of the Django framework, which means it inherits all the features and benefits of Django framework.
68
+ We try to continuously improve Camomilla by adding new features and fixing bugs. You can check the [CHANGELOG](./CHANGELOG.md) to see what has been added in the latest releases.
69
+
70
+ ## 📦 Quick Start
71
+
72
+ Here you can find some quick setup instructions to get started with Camomilla. For more detailed information, please refer to the [documentation](https://camomillacms.github.io/camomilla-core/).
73
+
74
+ > [!TIP]
75
+ >
76
+ > #### Env Virtualization 👾
77
+ >
78
+ > Use a virtualenv to isolate your project's dependencies from the system's python installation before starting. Check out [virtualenvwrapper](https://virtualenvwrapper.readthedocs.io/en/latest/) for more information.
79
+
80
+ Install django-camomilla-cms and django from pip
81
+
82
+ ```bash
83
+ $ pip install django
84
+ $ pip install django-camomilla-cms==6.0.0
85
+ ```
86
+
87
+ Create a new django project
88
+
89
+ ```bash
90
+ $ django-admin startproject <project_name>
91
+ $ cd <project_name>
92
+ ```
93
+
94
+ Create a dedicated folder for camomilla migrations
95
+
96
+ ```bash
97
+ $ mkdir -p camomilla_migrations
98
+ $ touch camomilla_migrations.__init__.py
99
+ ```
100
+
101
+ Create migrations and prepare the database
102
+
103
+ ```bash
104
+ $ python manage.py makemigrations camomilla
105
+ $ python manage.py migrate
106
+ ```
107
+
108
+ Add camomilla and camomilla dependencies to your project's INSTALLED_APPS
109
+
110
+ ```python
111
+ # <project_name>/settings.py
112
+
113
+ INSTALLED_APPS = [
114
+ ...
115
+ 'camomilla', # always needed
116
+ 'camomilla.theme', # needed to customize admin interface
117
+ 'djsuperadmin', # needed if you whant to use djsuperadmin for contents
118
+ 'modeltranslation', # needed if your website is multilanguage (can be added later)
119
+ 'rest_framework', # always needed
120
+ 'rest_framework.authtoken', # always needed
121
+ ...
122
+ ]
123
+ ```
124
+
125
+ Run the server
126
+
127
+ ```bash
128
+ $ python manage.py runserver
129
+ ```
130
+
131
+ ## 🧑‍💻 How to Contribute
132
+
133
+ We welcome contributions to Camomilla! If you want to contribute, please read our [contributing guide](./CONTRIBUTING.md) for more information on how to get started.
@@ -120,6 +120,7 @@ django_camomilla_cms.egg-info/dependency_links.txt
120
120
  django_camomilla_cms.egg-info/requires.txt
121
121
  django_camomilla_cms.egg-info/top_level.txt
122
122
  tests/__init__.py
123
+ tests/test_admin_page_form.py
123
124
  tests/test_api.py
124
125
  tests/test_camomilla_filters.py
125
126
  tests/test_media.py
@@ -1,7 +1,7 @@
1
1
  django-modeltranslation<=0.18.12,>=0.18.7
2
2
  djsuperadmin<1.0.0,>=0.9
3
3
  djangorestframework<=3.14.0,>=3.10.0
4
- django-structured-json-field>=0.4.1
4
+ django-structured-json-field>=0.4.2
5
5
  Pillow>=10.0.0
6
6
  django-admin-interface<1.0.0,>=0.26.0
7
7
  django-ckeditor<7.0.0,>=5.7.1
@@ -9,3 +9,5 @@ django-tinymce<5.0.0,>=4.1.0
9
9
  python-magic<0.5,>=0.4
10
10
  Django<6,>=3.2
11
11
  django_jsonform>=2.23
12
+ inflection>=0.5.1
13
+ uritemplate>=4.1.0