From 8480fb9fcf9fd1a9fcf25691ceb8dad0372ef77d Mon Sep 17 00:00:00 2001 From: Ambulance Clerc Date: Thu, 1 Jun 2023 16:37:38 +0200 Subject: [PATCH] Ajout et utilisation de summernote --- Reskreen/settings.py | 52 ++++++++++++++++++- carnet_rouge/admin.py | 4 +- carnet_rouge/models.py | 2 +- .../templates/carnet_rouge/cr_message.html | 2 +- carnet_rouge/urls.py | 15 +++--- requirements.txt | 2 +- 6 files changed, 63 insertions(+), 14 deletions(-) diff --git a/Reskreen/settings.py b/Reskreen/settings.py index 2445a91..509fd3f 100644 --- a/Reskreen/settings.py +++ b/Reskreen/settings.py @@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/4.0/ref/settings/ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -25,6 +26,8 @@ SECRET_KEY = 'django-insecure-j4jd&+4j^t_=@zr(#q@n!8e*58vkql6&_6w-t14ju8pw%ei%^s # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True + + cfg_dev_mode = True ALLOWED_HOSTS = ["rh.ambulance-clerc.ch"] @@ -50,10 +53,54 @@ INSTALLED_APPS = [ 'django.contrib.admin', 'carnet_rouge.apps.CarnetRougeConfig', #'nextcloud.apps.NextcloudConfig', - 'tinymce', + 'django_quill', + 'django_summernote', ] + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') +X_FRAME_OPTIONS = 'SAMEORIGIN' + +MAX_IMAGE_PIXELS = int(1024 * 1024 * 1024 // 4 // 3) +SUMMERNOTE_THEME = 'bs4' +SUMMERNOTE_CONFIG = { + # Using SummernoteWidget - iframe mode, default + 'iframe': True, + 'attachment_filesize_limit': 2621440 , + + + 'summernote': { + # As an example, using Summernote Air-mode + 'airMode': False, + + + # Change editor size + 'width': '100%', + 'height': '480', + + # Use proper language setting automatically (default) + 'lang': "fr-FR", + + # Toolbar customization + # https://summernote.org/deep-dive/#custom-toolbar-popover + 'toolbar': [ + ['view', ['undo','redo','fullscreen', 'codeview', 'help']], + ['fontfamily',['fontsize']], + ['font', ['bold', 'italic', 'underline', 'superscript', 'subscript', 'clear']], + ['color', ['forecolor','backcolor']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']], + ['insert', ['link', 'picture', 'video', 'hr']], + ['style', ['style']], + ], + } +} + +DATA_UPLOAD_MAX_NUMBER_FIELDS = 2500 + + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -293,9 +340,10 @@ JAZZMIN_SETTINGS = { "language_chooser": False, } - if cfg_dev_mode: NEXTCLOUD_HOST = "cloud.ambulance-clerc.ch" else: NEXTCLOUD_HOST = "cloud.ambulance-clerc.ch" NEXTCLOUD_USER_DEFAULT_PASSWORD = "Mc144*1870" + + diff --git a/carnet_rouge/admin.py b/carnet_rouge/admin.py index f8d92d6..5a83353 100644 --- a/carnet_rouge/admin.py +++ b/carnet_rouge/admin.py @@ -7,6 +7,7 @@ from django.contrib.admin import SimpleListFilter from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ +from django_summernote.admin import SummernoteModelAdmin class DefaultListFilter(SimpleListFilter): all_value = '_all' @@ -49,7 +50,8 @@ class StatusFilter(DefaultListFilter): return 1 @admin.register(cr_Message) -class cr_Message_Admin(admin.ModelAdmin): +class cr_Message_Admin(SummernoteModelAdmin): + summernote_fields = ('sText',) class Meta: verbose_name = 'Message carnet rouge' verbose_name_plural = 'Messages carnet rouge' diff --git a/carnet_rouge/models.py b/carnet_rouge/models.py index 6dfc2b8..07e7700 100644 --- a/carnet_rouge/models.py +++ b/carnet_rouge/models.py @@ -30,7 +30,7 @@ class cr_Message(models.Model): sReadedUsers = models.TextField("Liste des utilisateurs ayant lu", blank=True) DestGroup = models.ForeignKey(Group, on_delete=models.DO_NOTHING) sTitle = models.CharField("Titre", max_length=120) - sText = QuillField ("Corps de texte") + sText = models.TextField ("Corps de texte") dtValidityFrom = models.DateField("Validité depuis",default=timezone.now) dtValidityTo = models.DateField("Validité jusqu'à", blank=True, null=True) bEnabled = models.BooleanField("Actif", default=True) diff --git a/carnet_rouge/templates/carnet_rouge/cr_message.html b/carnet_rouge/templates/carnet_rouge/cr_message.html index fa10e78..88cf27a 100644 --- a/carnet_rouge/templates/carnet_rouge/cr_message.html +++ b/carnet_rouge/templates/carnet_rouge/cr_message.html @@ -1,7 +1,7 @@
- {{ obj.sText.html|safe }} + {{ obj.sText|safe }}
\ No newline at end of file diff --git a/carnet_rouge/urls.py b/carnet_rouge/urls.py index 7fbae6e..bdec56b 100644 --- a/carnet_rouge/urls.py +++ b/carnet_rouge/urls.py @@ -1,5 +1,7 @@ -from django.urls import path +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static from carnet_rouge import views @@ -9,12 +11,9 @@ urlpatterns = [ path('cr', views.model_form_view, name='model_form_view'), path('view/', views.CrDetailView.as_view(), name='cr_view'), path('notread', views.CrNotReadView.as_view(), name='cr_not_read_list'), - - - - - - + path('summernote/', include('django_summernote.urls')), + path('editor/', include('django_summernote.urls')), ] - +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/requirements.txt b/requirements.txt index e2adc94..97d6b3d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,4 +56,4 @@ x-wr-timezone==0.0.5 xhtml2pdf==0.2.7 zopfli==0.1.9 django-autologin -django-quill-editor \ No newline at end of file +django-summernote \ No newline at end of file