feat(documents): ajoute une liste de ressourceries et une gallerie
Parent
9d50d66f54
révision
2d9a418e62
|
@ -0,0 +1,40 @@
|
|||
# Generated by Django 2.2.10 on 2020-06-11 10:19
|
||||
|
||||
from django.db import migrations, models
|
||||
import wagtail.core.blocks
|
||||
import wagtail.core.fields
|
||||
import wagtail.images.blocks
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('documents', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Gallery',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=128, verbose_name='Nom')),
|
||||
('images', wagtail.core.fields.StreamField([('photo_caption', wagtail.core.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Image')), ('caption', wagtail.core.blocks.CharBlock(help_text="Une description de l'image, qui sera affichée en dessous.", label='Légende', required=False))]))])),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Galerie',
|
||||
'verbose_name_plural': 'Galeries',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ressourcerie',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=128, verbose_name='Nom')),
|
||||
('link', models.URLField(blank=True, verbose_name='Lien vers le site')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ressourcerie',
|
||||
'verbose_name_plural': 'Ressourceries',
|
||||
},
|
||||
),
|
||||
]
|
|
@ -2,7 +2,10 @@ import os
|
|||
|
||||
from django.db import models
|
||||
|
||||
from wagtail.admin.edit_handlers import FieldPanel
|
||||
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel
|
||||
from wagtail.core import blocks
|
||||
from wagtail.core.fields import StreamField
|
||||
from wagtail.images.blocks import ImageChooserBlock
|
||||
from wagtail.snippets.models import register_snippet
|
||||
|
||||
from .validators import validate_upload_document_file
|
||||
|
@ -58,3 +61,54 @@ class Document(models.Model):
|
|||
class Meta:
|
||||
verbose_name = "document"
|
||||
verbose_name_plural = "documents"
|
||||
|
||||
|
||||
class ImageCaptionBlock(blocks.StructBlock):
|
||||
""" Une image avec légende """
|
||||
|
||||
image = ImageChooserBlock(label='Image')
|
||||
caption = blocks.CharBlock(
|
||||
required=False,
|
||||
label="Légende",
|
||||
help_text=(
|
||||
"Une description de l'image, qui sera affichée en dessous."
|
||||
),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
label = "Image avec légende"
|
||||
icon = 'image'
|
||||
template = 'blocks/image_caption.html'
|
||||
|
||||
|
||||
@register_snippet
|
||||
class Gallery(models.Model):
|
||||
""" Une galerie d'images avec légende """
|
||||
|
||||
name = models.CharField('Nom', max_length=128)
|
||||
images = StreamField(
|
||||
blocks.StreamBlock([('photo_caption', ImageCaptionBlock())],)
|
||||
)
|
||||
panels = [FieldPanel('name'), StreamFieldPanel('images')]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Galerie"
|
||||
verbose_name_plural = "Galeries"
|
||||
|
||||
|
||||
@register_snippet
|
||||
class Ressourcerie(models.Model):
|
||||
""" Une ressourcerie du territoire """
|
||||
|
||||
name = models.CharField('Nom', max_length=128)
|
||||
link = models.URLField('Lien vers le site', blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Ressourcerie"
|
||||
verbose_name_plural = "Ressourceries"
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.urls import reverse_lazy
|
|||
from django.views.generic import CreateView, DeleteView, ListView, UpdateView
|
||||
|
||||
from .forms import CategoryForm, DocumentForm
|
||||
from .models import Category, Document
|
||||
from .models import Category, Document, Gallery, Ressourcerie
|
||||
|
||||
|
||||
class DocumentCreateView(LoginRequiredMixin, CreateView):
|
||||
|
@ -30,6 +30,14 @@ class CategoryListView(ListView):
|
|||
template_name = 'documents/category_list.html'
|
||||
model = Category
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['ressourceries'] = Ressourcerie.objects.all()
|
||||
context['gallery'] = Gallery.objects.filter(
|
||||
name='ressourceries'
|
||||
).first()
|
||||
return context
|
||||
|
||||
|
||||
class CategoryUpdateView(LoginRequiredMixin, UpdateView):
|
||||
model = Category
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{% load wagtailimages_tags %}
|
||||
|
||||
<figure class="figure">
|
||||
{% image self.image height-250 class="figure-img img-fluid" %}
|
||||
<figcaption class="figure-caption">{{ self.caption }}</figcaption>
|
||||
</figure>
|
|
@ -1,4 +1,5 @@
|
|||
{% extends "base.html" %}
|
||||
{% load static wagtailcore_tags %}
|
||||
|
||||
{% block title %}Ressources{% endblock %}
|
||||
{% block page_title %}Ressources{% endblock %}
|
||||
|
@ -18,4 +19,19 @@
|
|||
{% else %}
|
||||
<p class="lead">Il n'y a aucune categorie de ressources pour le moment.</p>
|
||||
{% endif %}
|
||||
<h1 class="mt-1 mb-3">Équipez vos locaux avec les ressourceries du territoire</h1>
|
||||
<p class="lead">Le département dispose de nombreuses ressourceries dans lesquelles vous pouvez vous équiper<p>
|
||||
|
||||
{% for block in gallery.images %}
|
||||
{% include_block block %}
|
||||
{% endfor %}
|
||||
|
||||
{% if ressourceries %}
|
||||
<ul class="list-group list-group-flush">
|
||||
{% for ressourcerie in ressourceries %}
|
||||
<li class="list-group-item"><a href="{{ ressourcerie.link }}">{{ ressourcerie.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
Chargement…
Référencer dans un nouveau ticket