Mr Duhaz hace 1 año
padre
commit
5f619d468f

+ 29 - 0
core/.gitignore

@@ -0,0 +1,29 @@
+__pycache__/__init__.cpython-312.pyc
+__pycache__/admin.cpython-312.pyc
+__pycache__/apps.cpython-312.pyc
+__pycache__/models.cpython-312.pyc
+__pycache__/views.cpython-312.pyc
+__pycache__/__init__.cpython-312.pyc
+__pycache__/admin.cpython-312.pyc
+__pycache__/apps.cpython-312.pyc
+__pycache__/models.cpython-312.pyc
+__pycache__/views.cpython-312.pyc
+migrations/__pycache__/__init__.cpython-312.pyc
+migrations/__pycache__/0001_initial.cpython-312.pyc
+migrations/__pycache__/0002_auto_20220422_0914.cpython-312.pyc
+migrations/__pycache__/0003_data.cpython-312.pyc
+migrations/__pycache__/0004_auto_20221121_1234.cpython-312.pyc
+migrations/__pycache__/0005_page_p_menu_stack.cpython-312.pyc
+migrations/__pycache__/0006_speed_dial.cpython-312.pyc
+migrations/__pycache__/0007_auto_20231201_1455.cpython-312.pyc
+migrations/__pycache__/0008_speed_dial_sd_icone.cpython-312.pyc
+migrations/__pycache__/0009_speed_dial_sd_color.cpython-312.pyc
+migrations/__pycache__/0010_auto_20231222_1114.cpython-312.pyc
+migrations/__pycache__/0011_auto_20240118_2009.cpython-312.pyc
+migrations/__pycache__/0011_auto_20240118_2011.cpython-312.pyc
+migrations/__pycache__/0011_auto_20240118_2016.cpython-312.pyc
+migrations/__pycache__/0011_alter_page_p_menu_parent.cpython-312.pyc
+migrations/__pycache__/0012_page_p_menu_est_parent.cpython-312.pyc
+migrations/__pycache__/0013_alter_page_p_menu_parent.cpython-312.pyc
+migrations/__pycache__/0014_fichier.cpython-312.pyc
+migrations/__pycache__/0015_auto_20240119_1346.cpython-312.pyc

+ 29 - 0
core/Installation.md sur docker

@@ -0,0 +1,29 @@
+# Commande à exécuté dans votre environnement docker.
+# Avec Django 3.2.23 & django-crispy-forms==1.12.0 & django-trumbowyg
+
+apk add git nano
+
+django-admin startproject dev_core
+cd dev_core
+
+python manage.py migrate
+python manage.py createsuperuser
+
+nano dev_core/settings.py
+-->	ALLOWED_HOSTS = [*]
+
+python manage.py runserver 0.0.0.0:8080
+
+git clone https://dev.duhaz.fr/MrDuhaz/core.git
+
+nano dev_core/settings.py
+-->	INSTALLED_APPS = [
++	'trumbowyg',
++	'crispy_forms',
++	'core',
+
+rm dev_core/urls.py
+nano dev_core/urls.py > voir fichier url.md
+
+python manage.py migrate
+python manage.py runserver 0.0.0.0:8080

+ 21 - 0
core/README.md

@@ -0,0 +1,21 @@
+**Presrequi :**
+
+pip install django==4.2.8
+
+pip install django-crispy-forms
+
+**Install :**
+
+python manage.py migrate
+
+python manage.py runserver
+
+**Installation sur un envoronement Docker :** 
+
+voir "Installation.md sur docker"
+
+**Changlog :**
+
+* Jan 2024 - Mise a jour gestion menu et amélioration mise en page 
+
+* 2023 - Version Initial

+ 32 - 0
core/URL.md

@@ -0,0 +1,32 @@
+from django.conf import settings
+from django.contrib.staticfiles import views
+
+from django.contrib import admin
+from django.urls import path, re_path, include
+from django.views.generic.base import RedirectView
+
+from core import views as core
+
+urlpatterns = [
+
+	path('trumbowyg/', include('trumbowyg.urls')),
+	path('admin/', admin.site.urls),
+	
+	path('account/login', core.p_login, name='core_login'),
+	path('account/logout', core.p_logout, name='core_logout'),
+	path('account/registration', core.p_registration , name='core_registration'),
+
+	path('favicon.ico', RedirectView.as_view(url = '/static/favicon.ico')),
+
+	path('' , core.index, name='core_index'),
+	# url generique
+	re_path(r'page/(?P<p_url>[a-zA-Z0-9_,-/]+)', core.page, name='core_page'),
+	# last chance 
+	re_path(r'(?P<p_url>[a-zA-Z0-9_.,-]+)', core.page, name='core_page'),
+
+]
+
+if settings.DEBUG:
+	urlpatterns += [
+		re_path(r'^static/(?P<path>.*)$', views.serve),
+	]

+ 7 - 0
core/__init__.py

@@ -56,4 +56,11 @@ class Contact_Admin(admin.ModelAdmin):
 
 admin.site.register(Contact, Contact_Admin)
 
+class Fichier_Admin(admin.ModelAdmin):
+	list_display = ('f_nom', 'f_date',)
+	search_fields = ['f_nom',]
+	list_filter = ('f_date',)
+
+admin.site.register(Fichier, Fichier_Admin)
+
 

+ 23 - 0
core/apps.py

@@ -0,0 +1,23 @@
+# Generated by Django 3.2.7 on 2022-04-22 09:14
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='page',
+            name='p_icone',
+            field=models.CharField(blank=True, max_length=64, verbose_name="Code de l'icone"),
+        ),
+        migrations.AlterField(
+            model_name='page',
+            name='p_type',
+            field=models.CharField(choices=[('page', 'Une page'), ('sys', 'Une page interne'), ('lien', 'Un lien'), ('lien_ext', 'Un lien Externe')], default='page', max_length=8, verbose_name='Type de page'),
+        ),
+    ]

+ 0 - 59
core/migrations/0002_auto_20240110_2107.py

@@ -1,59 +0,0 @@
-# Generated by Django 3.2.23 on 2024-01-10 21:07
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Data',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('d_titre', models.CharField(max_length=128, unique=True, verbose_name='Nom')),
-                ('d_titre_slugify', models.CharField(blank=True, editable=False, max_length=128, verbose_name='Nom Slugify')),
-                ('d_type', models.CharField(max_length=64, verbose_name='Type')),
-                ('d_variable', models.CharField(max_length=64, verbose_name='Valeur')),
-            ],
-            options={
-                'verbose_name': 'Stocage de données',
-                'verbose_name_plural': 'Stocage de données',
-                'ordering': ['d_titre'],
-            },
-        ),
-        migrations.CreateModel(
-            name='Speed_Dial',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('sd_titre', models.CharField(max_length=128, unique=True, verbose_name='Titre')),
-                ('sd_icone', models.CharField(blank=True, max_length=64, verbose_name="Code de l'icone")),
-                ('sd_color', models.CharField(choices=[('primary', 'Bleu'), ('secondary', 'Gris'), ('success', 'Vert'), ('danger', 'Rouge'), ('warning', 'Orange'), ('info', 'Bleu clair'), ('dark', 'Noir'), ('white', 'Blanc')], default='primary', max_length=10, verbose_name='Couleur du cadre')),
-                ('sd_adresse', models.CharField(max_length=256, verbose_name='Adresse')),
-                ('sd_poid', models.PositiveSmallIntegerField(default=50, verbose_name='Poid')),
-            ],
-            options={
-                'verbose_name': 'Speed Dial',
-                'verbose_name_plural': 'Speed Dial',
-            },
-        ),
-        migrations.AddField(
-            model_name='page',
-            name='p_menu_parent',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.page'),
-        ),
-        migrations.AlterField(
-            model_name='page',
-            name='p_icone',
-            field=models.CharField(blank=True, max_length=64, verbose_name="Code de l'icone"),
-        ),
-        migrations.AlterField(
-            model_name='page',
-            name='p_type',
-            field=models.CharField(choices=[('page', 'Une page'), ('sys', 'Une page interne'), ('lien', 'Un lien'), ('lien_ext', 'Un lien Externe')], default='page', max_length=8, verbose_name='Type de page'),
-        ),
-    ]

+ 28 - 0
core/migrations/0003_data.py

@@ -0,0 +1,28 @@
+# Generated by Django 3.2.7 on 2022-11-21 11:17
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0002_auto_20220422_0914'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Data',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('d_titre', models.CharField(max_length=128, unique=True, verbose_name='Titre')),
+                ('d_titre_slugify', models.CharField(blank=True, editable=False, max_length=128, verbose_name='Titre Slugify')),
+                ('d_type', models.CharField(max_length=64, unique=True, verbose_name='Titre')),
+                ('d_variable', models.CharField(max_length=64, unique=True, verbose_name='Titre')),
+            ],
+            options={
+                'verbose_name': 'Stocage de données',
+                'verbose_name_plural': 'Stocage de données',
+                'ordering': ['d_titre'],
+            },
+        ),
+    ]

+ 33 - 0
core/migrations/0004_auto_20221121_1234.py

@@ -0,0 +1,33 @@
+# Generated by Django 3.2.7 on 2022-11-21 12:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0003_data'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='data',
+            name='d_titre',
+            field=models.CharField(max_length=128, unique=True, verbose_name='Nom'),
+        ),
+        migrations.AlterField(
+            model_name='data',
+            name='d_titre_slugify',
+            field=models.CharField(blank=True, editable=False, max_length=128, verbose_name='Nom Slugify'),
+        ),
+        migrations.AlterField(
+            model_name='data',
+            name='d_type',
+            field=models.CharField(max_length=64, verbose_name='Type'),
+        ),
+        migrations.AlterField(
+            model_name='data',
+            name='d_variable',
+            field=models.CharField(max_length=64, verbose_name='Valeur'),
+        ),
+    ]

+ 18 - 0
core/migrations/0005_page_p_menu_stack.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.16 on 2022-12-09 08:31
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0004_auto_20221121_1234'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='page',
+            name='p_menu_stack',
+            field=models.BooleanField(default=False, verbose_name='Regroupé dans le menu'),
+        ),
+    ]

+ 25 - 0
core/migrations/0006_speed_dial.py

@@ -0,0 +1,25 @@
+# Generated by Django 3.2.16 on 2023-12-01 14:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0005_page_p_menu_stack'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Speed_Dial',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sd_titre', models.CharField(max_length=128, unique=True, verbose_name='Titre')),
+                ('sd_adresse', models.CharField(max_length=64, verbose_name='Adresse')),
+            ],
+            options={
+                'verbose_name': 'Speed Dial',
+                'verbose_name_plural': 'Speed Dial',
+            },
+        ),
+    ]

+ 23 - 0
core/migrations/0007_auto_20231201_1455.py

@@ -0,0 +1,23 @@
+# Generated by Django 3.2.16 on 2023-12-01 14:55
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0006_speed_dial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='speed_dial',
+            name='sd_poid',
+            field=models.PositiveSmallIntegerField(default=50, verbose_name='Poid'),
+        ),
+        migrations.AlterField(
+            model_name='speed_dial',
+            name='sd_adresse',
+            field=models.CharField(max_length=256, verbose_name='Adresse'),
+        ),
+    ]

+ 18 - 0
core/migrations/0008_speed_dial_sd_icone.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.16 on 2023-12-08 07:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0007_auto_20231201_1455'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='speed_dial',
+            name='sd_icone',
+            field=models.CharField(blank=True, max_length=64, verbose_name="Code de l'icone"),
+        ),
+    ]

+ 18 - 0
core/migrations/0009_speed_dial_sd_color.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.16 on 2023-12-20 09:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0008_speed_dial_sd_icone'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='speed_dial',
+            name='sd_color',
+            field=models.CharField(choices=[('primary', 'Bleu'), ('secondary', 'Gris'), ('success', 'Vert'), ('danger', 'Rouge'), ('warning', 'Orange'), ('info', 'Bleu clair'), ('dark', 'Noir'), ('white', 'Blanc')], default='primary', max_length=10, verbose_name='Couleur du cadre'),
+        ),
+    ]

+ 23 - 0
core/migrations/0010_auto_20231222_1114.py

@@ -0,0 +1,23 @@
+# Generated by Django 3.2.16 on 2023-12-22 11:14
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0009_speed_dial_sd_color'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='page',
+            name='p_menu_stack',
+        ),
+        migrations.AddField(
+            model_name='page',
+            name='p_menu_parent',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.page'),
+        ),
+    ]

+ 19 - 0
core/migrations/0011_alter_page_p_menu_parent.py

@@ -0,0 +1,19 @@
+# Generated by Django 3.2.23 on 2024-01-18 20:42
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0010_auto_20231222_1114'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='page',
+            name='p_menu_parent',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.page', verbose_name='Parent'),
+        ),
+    ]

+ 18 - 0
core/migrations/0012_page_p_menu_est_parent.py

@@ -0,0 +1,18 @@
+# Generated by Django 3.2.23 on 2024-01-18 20:58
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0011_alter_page_p_menu_parent'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='page',
+            name='p_menu_est_parent',
+            field=models.BooleanField(default=False, verbose_name='Utilisé comme parent'),
+        ),
+    ]

+ 19 - 0
core/migrations/0013_alter_page_p_menu_parent.py

@@ -0,0 +1,19 @@
+# Generated by Django 3.2.23 on 2024-01-18 20:59
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0012_page_p_menu_est_parent'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='page',
+            name='p_menu_parent',
+            field=models.ForeignKey(blank=True, limit_choices_to={'p_menu_est_parent': True}, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.page', verbose_name='Parent'),
+        ),
+    ]

+ 21 - 0
core/migrations/0014_fichier.py

@@ -0,0 +1,21 @@
+# Generated by Django 3.2.23 on 2024-01-19 13:40
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0013_alter_page_p_menu_parent'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Fichier',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('f_nom', models.CharField(blank=True, editable=False, max_length=128, verbose_name='Nom du fichier')),
+                ('f_fichier', models.FileField(upload_to='static/uploads/', verbose_name='Fichier')),
+            ],
+        ),
+    ]

+ 24 - 0
core/migrations/0015_auto_20240119_1346.py

@@ -0,0 +1,24 @@
+# Generated by Django 3.2.23 on 2024-01-19 13:46
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0014_fichier'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='fichier',
+            options={'ordering': ['f_date'], 'verbose_name': 'Stocage de fichiers', 'verbose_name_plural': 'Stocage de fichiers'},
+        ),
+        migrations.AddField(
+            model_name='fichier',
+            name='f_date',
+            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='Date'),
+            preserve_default=False,
+        ),
+    ]

+ 21 - 1
core/migrations/__init__.py

@@ -2,6 +2,7 @@ from django.db import models
 from django import forms
 
 from django.template.defaultfilters import slugify
+
 from trumbowyg.widgets import TrumbowygWidget
 
 menu_pos = (
@@ -48,6 +49,24 @@ class Data (models.Model) : #stocage de donnée dynamique
 		return self.d_titre
 	def __str__(self):
 		return '%s' % (self.d_titre)
+	
+class Fichier (models.Model) : # Upload de fichier pour réutilisation dans les pages
+	f_nom = models.CharField("Nom du fichier", max_length = 128, blank = True, editable = False)
+	f_date = models.DateTimeField("Date", auto_now_add=True)
+	f_fichier = models.FileField("Fichier", upload_to='static/uploads/')
+
+	class Meta :
+		verbose_name = 'Stocage de fichiers'
+		verbose_name_plural = 'Stocage de fichiers'
+		ordering = ['f_date']
+
+	def save(self, *args, **kwargs) :
+		self.f_nom = slugify(self.f_fichier.name)
+		super(Fichier, self).save(*args, **kwargs)
+	def __unicode__(self):
+		return self.f_nom
+	def __str__(self):
+		return '%s' % (self.f_nom)
 
 class Page (models.Model) : #Architecture pour les pages static est dynamique
 	p_titre = models.CharField("Titre", max_length = 128, unique = True)
@@ -56,7 +75,8 @@ class Page (models.Model) : #Architecture pour les pages static est dynamique
 	p_type = models.CharField("Type de page",choices=page_type, max_length=8, default='page')
 	p_adresse = models.CharField("Adresse", max_length = 64)
 	p_menu_position = models.CharField("A utiliser dans un menu ?",choices=menu_pos, max_length=4, default='no')
-	p_menu_parent = models.ForeignKey('self', blank = True, null=True, on_delete=models.PROTECT)
+	p_menu_est_parent = models.BooleanField("Utilisé comme parent", default = False)
+	p_menu_parent = models.ForeignKey('self',verbose_name="Parent", blank = True, null = True, on_delete=models.PROTECT, limit_choices_to={'p_menu_est_parent': True})
 	p_menu_poid = models.PositiveSmallIntegerField("Poid si utilisé dans les menus", default=50)
 	p_mots_clefs = models.CharField("Mots clefs", max_length = 512, blank = True)
 	p_description = models.TextField("Description", blank = True)

BIN
core/static/background.jpeg


BIN
core/static/favicon.ico


BIN
core/static/logo-txt-Mrduhaz.png


+ 12 - 0
core/static/trumbowyg/en_us.min.js

@@ -0,0 +1,12 @@
+
+/* ===========================================================
+ * fr.js
+ * French translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ *          Twitter : @AlexandreDemode
+ *          Website : alex-d.fr
+ * Reviewed by : Abdou Developer (test20091)
+ * 	    Github : https://github.com/test20091
+ */

+ 1 - 1
core/templates/404.html

@@ -8,7 +8,7 @@
 {% block main %}
 <div class="card text-center mx-auto m-3 border-light " style="width: 32rem;">
 	<img src="/static/img/img-404.jpg" class="card-img-top">
-	<div class="card-body">        
+	<div class="card-body">
 		<p>Désoler, nous l’avons bien cherché, mais nous ne l’avons pas trouvé. Cette page n’est surement plus d’actualité.</p>
 	</div>
 </div>

+ 4 - 4
core/templates/base.html

@@ -7,7 +7,7 @@
 	<meta name="keywords" content="{%if page.p_mots_clefs%}{{page.p_mots_clefs}}{% endif %}">
 	<meta name="description" content="{% if page.p_description %}{{page.p_description}}{% endif %}">
 	{% block add_meta_description %}{% endblock %}
-	<title>{% if page.p_meta_title %}{{page.p_meta_title}} | {% elif page.p_titre %}{{page.p_titre}} | {% endif %}{{page.c_sitename}}</title>
+	<title>{{page.c_sitename}}{% if page.p_meta_title %} | {{page.p_meta_title}}{% elif page.p_titre %} | {{page.p_titre}}{% endif %}</title>
 	<link rel="shortcut icon" href="/static/favicon.ico">
 	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
 	<link href="//fonts.googleapis.com/css2?family=Kufam&display=swap" rel="stylesheet">
@@ -33,7 +33,7 @@
 	</style>
 </head>
 <body class="d-flex flex-column h-100">
-	<header style="color: #fff; font-family: Kufam', cursive;">
+<header style="color: #fff; font-family: Omnes;">
 	<nav class="navbar navbar-expand-lg navbar-dark" style="background-color: {{page.c_bgcolor}};"> 
 		<div class="container-fluid">
 		<div class="collapse navbar-collapse" id="navbarSupportedContent">
@@ -68,7 +68,7 @@
 						<a class="dropdown-item" href="{% url 'core_login' %}" ><i class="fas fa-sign-in-alt"></i> Connexion</a>
 					{% elif request.user.is_authenticated %}
 						<a class="dropdown-item" href="{% url 'admin:index' %}" ><i class="fas fa-cog" ></i> Admin</a>
-						<a class="dropdown-item" href="{% url 'core_logout' %}" ><i class="fas fa-sign-out-alt"></i> Déconexion</a>
+						<a class="dropdown-item" href="{% url 'core_logout' %}" ><i class="fas fa-sign-out-alt"></i> Déconnexion</a>
 					{% endif %}
 				</div>
 			</div>
@@ -88,7 +88,7 @@
 							<li class="nav-item"><a class="nav-link" href="{% url 'core_login' %}" ><i class="fas fa-sign-in-alt"></i> Connexion</a></li>
 						{% elif request.user.is_authenticated %}
 							<li class="nav-item"><a class="nav-link" href="{% url 'admin:index' %}" ><i class="fas fa-cog" ></i> Admin</a></li>
-							<li class="nav-item"><a class="nav-link" href="{% url 'core_logout' %}" ><i class="fas fa-sign-out-alt"></i> Déconexion</a></li>
+							<li class="nav-item"><a class="nav-link" href="{% url 'core_logout' %}" ><i class="fas fa-sign-out-alt"></i> Déconnexion</a></li>
 						{% endif %}
 					{% endif %}
 					</ul>

+ 169 - 0
core/templates/base_no_card.html

@@ -1,3 +1,171 @@
+MrDuhaz / Blog-Duhaz
+ 
+ 
+base_no_card.html 7.2 KB
+  
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
 {% load static %}
 <!DOCTYPE html>
 <html lang="fr" class="h-100">
@@ -161,3 +329,4 @@
 {% endblock %}
 </body>
 </html>
+© 2024 Mr Duhaz gogs !Page: 186ms Modèle: 3ms  français Site web

+ 17 - 19
core/templates/link.html

@@ -2,40 +2,38 @@
 {% load i18n %}
 {% load crispy_forms_tags %}
 
-
-
 {% block main %}
 {% if request.user.is_authenticated %}
-	<div class="card text-white bg-secondary mb-3">
+	<div class="card text-white bg-secondary m-5">
 	<div class="card-header">Oups ! </div>
 	<div class="card-body">
 		<p class="card-text">
-			Pardon, mais vous étez deja connecté. <a href="{% url 'core_index' %}">Retourné à accueil</a>
+			Pardon, mais vous étés déjà connecté. <a href="{% url 'core_index' %}">Retourné à accueil</a>
 		</p>
-	</div>
+		</div>
 	</div>
 {% else %}
-	<div class="col-sm-9 p-0">
-	<div class="card text-white bg-dark mb-3">
-		<div class="card-header">Connection</div>
-		<div class="card-body">
-		<form method="post">{% csrf_token %}
-			{{ form|crispy }}
-			<input type="submit" class="btn btn-success" value="Se connecter">
-		</form>
+		<div class="card text-white bg-secondary m-5">
+	<div class="card-header">Aide</div>
+	<div class="card-body">
+		<p class="card-text">
+			Merci de vous connecter en utilisant vos informations de connexion liée à votre ouverture de session.
+		</p>
 		</div>
 	</div>
-	</div>
 
 {% endif %}
 {% endblock %}
 
 {% block right_panel %}
-<div>
-	<div class="row">
-	<div class="col-lg-12 col-sm-6 col-xl-6 mb-1"><a href="{% url 'core_index' %}" class="btn btn-secondary btn-block"><i class="fas fa-ban" ></i> Annuler</a></div>
-	<div class="col-12 mb-1"><p>Vous pouvez aussi <a href="{{ password_reset_url }}?next={{ profile_update_url }}">réinitialisez votre mot de passe</a> si vous l'avez oublié.</p></div>
+	<div class="card text-white bg-dark m-0">
+		<div class="card-header">Connection</div>
+		<div class="card-body">
+		<form method="post">{% csrf_token %}
+			{{ form|crispy }}
+			<input type="submit" class="btn btn-success" value="Se connecter">
+		</form>
+		</div>
 	</div>
-</div>
 {% endblock %}
 

+ 26 - 0
core/templates/page.html

@@ -12,6 +12,23 @@
 	{% if page.output and page.err %}<hr>{% endif %}
 	{% if page.output %}{{page.output|safe|urlize}}{% endif %}
 {% endif %}
+{% if page.speeddial %}
+	<h3>Speed Dial</h3>
+	<div class="container mb-4">
+		<div class="row">
+		{% for item in page.speeddial %}
+			<div class="col-sm col-lg-3 mb-1">
+				<div class="card bg-{{item.sd_color}}" style="padding: 1px;">
+					<div class="card-body d-flex flex-row" style=" background : white; opacity: 0.85;">
+						<div class="p-2"><a class="text-decoration-none" href="{{item.sd_adresse}}" target="_blank"><i class="{% if item.sd_icone != '' %}{{item.sd_icone }}{% else %}fas fa-external-link-square-alt{% endif %}"></i></a></div>
+						<div class="p-2 w-80" onmouseover="this.style.cursor='pointer';" onclick="bt_open_url('{{item.sd_adresse|escapejs}}')">{{item.sd_titre}}</div>
+					</div>
+				</div>
+			</div>
+		{% endfor %}
+		</div>
+	</div>
+{% endif%}
 {% if page.form and not page.output %}
 	<div class="col-sm-9 p-0 m-3">
 	<div class="card text-white bg-dark">
@@ -42,3 +59,12 @@
 </div>
 {% endif %}
 {% endblock %}
+
+{% block script %}
+<script type="text/javascript">
+function bt_open_url(url){
+	{% comment %} window.open(url,'_blank'); {% endcomment %}
+	window.location.href=url;
+};
+</script>
+{% endblock %}

+ 0 - 0
core/tests.py