diff --git a/content/migrations/0001_initial.py b/content/migrations/0001_initial.py index 2ba9dba..ff3ec93 100644 --- a/content/migrations/0001_initial.py +++ b/content/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 2.0.1 on 2018-01-24 10:29 +# Generated by Django 2.0.1 on 2018-02-28 12:53 from django.db import migrations, models import django.db.models.deletion @@ -17,7 +17,9 @@ class Migration(migrations.Migration): name='Category', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('Nom de la catégorie', models.CharField(max_length=255)), + ('name', models.CharField(max_length=255, verbose_name='Nom de la catégorie')), + ('description', models.TextField(default='', verbose_name='Descriton de la catégorie')), + ('image', models.ImageField(null=True, upload_to='', verbose_name='Illustration de la catégorie')), ], ), migrations.CreateModel( diff --git a/content/migrations/0002_auto_20180124_1043.py b/content/migrations/0002_auto_20180124_1043.py deleted file mode 100644 index 2f2e85c..0000000 --- a/content/migrations/0002_auto_20180124_1043.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 2.0.1 on 2018-01-24 10:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('content', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='category', - name='Nom de la catégorie', - ), - migrations.AddField( - model_name='category', - name='name', - field=models.CharField(default='Nom de la catégorie', max_length=255, verbose_name='Nom de la catégorie'), - preserve_default=False, - ), - ] diff --git a/content/models.py b/content/models.py index cc9d32c..2fefee0 100644 --- a/content/models.py +++ b/content/models.py @@ -1,6 +1,7 @@ from django.db import models from django.urls import reverse from django.contrib.auth.models import Group +from django.conf import settings class Category(models.Model): @@ -9,6 +10,14 @@ class Category(models.Model): max_length=255, verbose_name="Nom de la catégorie" ) + description = models.TextField( + verbose_name="Descriton de la catégorie", + default="" + ) + image = models.ImageField( + verbose_name="Illustration de la catégorie", + null=True, + ) def get_absolute_url(self): return reverse('content:category-list', kwargs={'pk':self.pk}) diff --git a/content/templates/content/content_list.html b/content/templates/content/content_list.html index cb7827f..8c741b0 100644 --- a/content/templates/content/content_list.html +++ b/content/templates/content/content_list.html @@ -1,17 +1,42 @@ {% extends "base.html" %} -{% block content %} - -{% if category %} -

{{category.name}}

-{% else %} -

Liste des contenus

-{% endif %} - -{% for content in contents %} -
-

{{content.name}}

-

Contenu proposé par {{content.group_owner.name}}

- C'est ici que ça se passe -
-{% endfor %} +{% load staticfiles %} +{% block style %} +.page-title +{ +background-image : url("{{category.image.url}}"); +background-attachment : fixed; +background-position: center; +} +.title-block +{ +background-color: rgba(248, 249, 250, 0.6); +} +{% endblock %} +{% block content %} + +
+
+

{{category.name}}

+

{{category.description}}

+ Aller voir ! +
+
+
+ + {% for content in contents %} +
+
+

{{content.name}}

+

Contenu proposé par {{content.group_owner.name}}

+
+ +
+ {% endfor %} + {% endblock %} diff --git a/content/views.py b/content/views.py index 0265ecc..56ea358 100644 --- a/content/views.py +++ b/content/views.py @@ -28,6 +28,12 @@ class CreateCategory(generic.CreateView): """Création de catégorie.""" model = Category fields = '__all__' + template_name = "edit.html" + + def get_context_data(self, **kwargs): + context = super(generic.CreateView, self).get_context_data(**kwargs) + context['title'] = "Création de catégorie" + return context class DeleteCategory(generic.DeleteView): @@ -42,3 +48,9 @@ class EditCategory(generic.UpdateView): model = Category fields = '__all__' template_name = "edit.html" + def get_context_data(self, **kwargs): + context = super(generic.UpdateView, self).get_context_data(**kwargs) + context['title'] = "Édition de " + self.object.name + return context + + diff --git a/requirements.txt b/requirements.txt index 36538ac..8387531 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ Django==2.0.1 +django-bootstrap4==0.0.6 +Pillow==5.0.0 pycrypto==2.6.1 pytz==2017.3 diff --git a/settings/migrations/0001_initial.py b/settings/migrations/0001_initial.py index 7d98541..d805f92 100644 --- a/settings/migrations/0001_initial.py +++ b/settings/migrations/0001_initial.py @@ -1,7 +1,7 @@ -# Generated by Django 2.0.1 on 2018-01-14 18:04 +# Generated by Django 2.0.1 on 2018-02-28 12:53 from django.db import migrations, models -import settings.models +import settings.aes_field class Migration(migrations.Migration): @@ -16,17 +16,17 @@ class Migration(migrations.Migration): name='ContentSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('URL du FTP', models.URLField(max_length=255)), - ('Identifiant sur le FTP', models.CharField(max_length=255)), - ('Mot de passe', settings.models.AESEncryptedField(max_length=255)), + ('ftp_url', models.URLField(default='', max_length=255, verbose_name='URL du FTP')), + ('ftp_id', models.CharField(default='', max_length=255, verbose_name='Identifiant sur le FTP')), + ('ftp_pass', settings.aes_field.AESEncryptedField(default='', max_length=255, verbose_name='Mot de passe')), ], ), migrations.CreateModel( name='SiteSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('allow_upload', models.BooleanField(help_text="Autoriser l'upload de vidéos.")), - ('site_name', models.CharField(help_text='Nom du site', max_length=255)), + ('allow_upload', models.BooleanField(default=False, verbose_name="Autoriser l'upload de vidéos.")), + ('home_message', models.TextField(default='', verbose_name="Message de la page d'accueil")), ], ), ] diff --git a/settings/migrations/0002_auto_20180114_1832.py b/settings/migrations/0002_auto_20180114_1832.py deleted file mode 100644 index abab904..0000000 --- a/settings/migrations/0002_auto_20180114_1832.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 2.0.1 on 2018-01-14 18:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('settings', '0001_initial'), - ] - - operations = [ - migrations.RemoveField( - model_name='sitesettings', - name='allow_upload', - ), - migrations.RemoveField( - model_name='sitesettings', - name='site_name', - ), - migrations.AddField( - model_name='sitesettings', - name="Autoriser l'upload de vidéos.", - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='sitesettings', - name="Message de la page d'accueil", - field=models.TextField(default=''), - ), - ] diff --git a/settings/migrations/0003_auto_20180114_1837.py b/settings/migrations/0003_auto_20180114_1837.py deleted file mode 100644 index 27d6385..0000000 --- a/settings/migrations/0003_auto_20180114_1837.py +++ /dev/null @@ -1,59 +0,0 @@ -# Generated by Django 2.0.1 on 2018-01-14 18:37 - -from django.db import migrations, models -import settings.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('settings', '0002_auto_20180114_1832'), - ] - - operations = [ - migrations.RemoveField( - model_name='contentsettings', - name='Identifiant sur le FTP', - ), - migrations.RemoveField( - model_name='contentsettings', - name='Mot de passe', - ), - migrations.RemoveField( - model_name='contentsettings', - name='URL du FTP', - ), - migrations.RemoveField( - model_name='sitesettings', - name="Autoriser l'upload de vidéos.", - ), - migrations.RemoveField( - model_name='sitesettings', - name="Message de la page d'accueil", - ), - migrations.AddField( - model_name='contentsettings', - name='ftp_id', - field=models.CharField(default='', max_length=255, verbose_name='Identifiant sur le FTP'), - ), - migrations.AddField( - model_name='contentsettings', - name='ftp_pass', - field=settings.models.AESEncryptedField(default='', max_length=255, verbose_name='Mot de passe'), - ), - migrations.AddField( - model_name='contentsettings', - name='ftp_url', - field=models.URLField(default='', max_length=255, verbose_name='URL du FTP'), - ), - migrations.AddField( - model_name='sitesettings', - name='allow_upload', - field=models.BooleanField(default=False, verbose_name="Autoriser l'upload de vidéos."), - ), - migrations.AddField( - model_name='sitesettings', - name='home_message', - field=models.TextField(default='', verbose_name="Message de la page d'accueil"), - ), - ] diff --git a/settings/models.py b/settings/models.py index 18082ca..0ab68cf 100644 --- a/settings/models.py +++ b/settings/models.py @@ -4,6 +4,7 @@ from .aes_field import AESEncryptedField class ContentSettings(models.Model): + PRETTY_NAME = "Réglages des contenus" ftp_url = models.URLField( max_length=255, verbose_name="URL du FTP", @@ -22,6 +23,7 @@ class ContentSettings(models.Model): class SiteSettings(models.Model): + PRETTY_NAME = "Réglages du site" allow_upload = models.BooleanField( verbose_name="Autoriser l'upload de vidéos.", default=False, diff --git a/settings/views.py b/settings/views.py index 188d46d..a841f4a 100644 --- a/settings/views.py +++ b/settings/views.py @@ -26,3 +26,10 @@ class EditSiteSettingsView(UpdateView): def get_object(self, queryset=None): obj,_ = self.model.objects.get_or_create() return obj + + def get_context_data(self, **kwargs): + context = super(UpdateView, self).get_context_data(**kwargs) + context['title'] = "Édition des " + self.object.PRETTY_NAME + return context + + diff --git a/site_tps/settings.py b/site_tps/settings.py index aa6dbfe..970eee0 100644 --- a/site_tps/settings.py +++ b/site_tps/settings.py @@ -39,9 +39,9 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'bootstrap4', 'settings', 'content', - 'vote', 'users', ] @@ -124,3 +124,6 @@ USE_TZ = True # https://docs.djangoproject.com/en/2.0/howto/static-files/ STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media') diff --git a/site_tps/urls.py b/site_tps/urls.py index 2c80d35..ef684f3 100644 --- a/site_tps/urls.py +++ b/site_tps/urls.py @@ -15,6 +15,8 @@ Including another URLconf """ from django.contrib import admin from django.urls import include, path +from django.conf import settings +from django.conf.urls.static import static from . import views @@ -23,6 +25,7 @@ urlpatterns = [ path('', views.home, name="home"), path('content/', include('content.urls')), path('settings/', include('settings.urls')), - path('vote/', include('vote.urls')), path('users/', include('users.urls')), ] +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/templates/base.html b/templates/base.html index 25f9b95..e897fa2 100644 --- a/templates/base.html +++ b/templates/base.html @@ -6,6 +6,9 @@ + {% include 'nav_bar.html' %} diff --git a/templates/edit.html b/templates/edit.html index 106fa6a..beb96c7 100644 --- a/templates/edit.html +++ b/templates/edit.html @@ -1,13 +1,12 @@ {% extends 'base.html' %} -{% load bootstrap3 %} +{% load bootstrap4 %} {% block content %} {% if title %}

{{title}}

{% endif %} -
{% csrf_token %} +{% csrf_token %} {% bootstrap_form form %}