diff --git a/inventory/migrations/0001_initial.py b/inventory/migrations/0001_initial.py index 6812fc4..5f44182 100644 --- a/inventory/migrations/0001_initial.py +++ b/inventory/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.1.2 on 2020-10-11 15:42 +# Generated by Django 3.1.2 on 2020-11-21 18:17 import autoslug.fields from django.db import migrations, models @@ -18,6 +18,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=256, verbose_name='nom')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True)), ], options={ 'verbose_name': 'catégorie', @@ -28,6 +29,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=256, verbose_name='nom')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True)), ], ), migrations.CreateModel( @@ -41,7 +43,7 @@ class Migration(migrations.Migration): ('editor', models.CharField(blank=True, max_length=256, verbose_name='éditeur')), ('game_designer', models.CharField(blank=True, max_length=256, verbose_name='game designer')), ('description', models.TextField(blank=True, verbose_name='description')), - ('image', models.ImageField(blank=True, upload_to='game_images/', verbose_name='image')), + ('image', models.ImageField(blank=True, upload_to='game_img/', verbose_name='image')), ('category', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='inventory.category', verbose_name='catégorie')), ('tags', models.ManyToManyField(blank=True, to='inventory.Tag', verbose_name='tags')), ], diff --git a/inventory/migrations/0002_auto_20201021_2157.py b/inventory/migrations/0002_auto_20201021_2157.py deleted file mode 100644 index 8effd80..0000000 --- a/inventory/migrations/0002_auto_20201021_2157.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.2 on 2020-10-21 19:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('inventory', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='game', - name='image', - field=models.ImageField(blank=True, upload_to='game_img/', verbose_name='image'), - ), - ] diff --git a/inventory/models.py b/inventory/models.py index cc2e024..ccb24c0 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -1,9 +1,11 @@ from django.db import models +from django.urls import reverse from autoslug import AutoSlugField class Category(models.Model): name = models.CharField(max_length=256, verbose_name="nom") + slug = AutoSlugField(populate_from="name", unique=True) class Meta: verbose_name = "catégorie" @@ -11,13 +13,20 @@ class Category(models.Model): def __str__(self): return self.name + def get_absolute_url(self): + return reverse("inventory:category", args=(self.slug,)) + class Tag(models.Model): name = models.CharField(max_length=256, verbose_name="nom") + slug = AutoSlugField(populate_from="name", unique=True) def __str__(self): return self.name + def get_absolute_url(self): + return reverse("inventory:tag", args=(self.slug,)) + class Game(models.Model): title = models.CharField(verbose_name="titre", max_length=256) @@ -43,3 +52,6 @@ class Game(models.Model): def __str__(self): return self.title + + def get_absolute_url(self): + return reverse("inventory:game", args=(self.slug,)) diff --git a/inventory/templates/inventory/category.html b/inventory/templates/inventory/category.html new file mode 100644 index 0000000..f28aefd --- /dev/null +++ b/inventory/templates/inventory/category.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block "content" %} +

{{ category.name }}

+ + {% with game_list=category.game_set.all %} + Il y a {{ game_list|length }} jeu{{ game_list|pluralize:"x" }} dans cette catégorie : + + {% endwith %} +{% endblock %} diff --git a/inventory/templates/inventory/category_list.html b/inventory/templates/inventory/category_list.html new file mode 100644 index 0000000..2cee0a4 --- /dev/null +++ b/inventory/templates/inventory/category_list.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} + +{% block "content" %} +

Liste des catégories

+ + Il y a {{ category_list|length }} catégorie{{ category_list|pluralize }} de jeux : + +{% endblock %} diff --git a/inventory/templates/inventory/game.html b/inventory/templates/inventory/game.html index c5cf165..2268561 100644 --- a/inventory/templates/inventory/game.html +++ b/inventory/templates/inventory/game.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load static %} {% block "content" %}

{{ game.title }}

@@ -9,21 +10,21 @@ {% endif %}
-

{{ game.category }}

+

{{ game.category }}


{{ game.player_range }}

{{ game.duration }}


- {% if game.tags.count %} - {{ game.tags.all|join:", " }} - {% else %} + {% for tag in game.tags.all %} + {{ tag }}{% if not forloop.last %},{% endif %} + {% empty %} (Aucun tag) - {% endif %} + {% endfor %}


-

{{ game.game_designer }} -

{{ game.editor }}

+

{{ game.game_designer|default:"(Game designer inconnu)" }} +

{{ game.editor|default:"(Éditeur inconnu)" }}

diff --git a/inventory/templates/inventory/game_list.html b/inventory/templates/inventory/game_list.html new file mode 100644 index 0000000..a5f4efd --- /dev/null +++ b/inventory/templates/inventory/game_list.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} + +{% block "content" %} +

Liste des jeux

+ + Il y a {{ game_list|length }} jeu{{ game_list|pluralize:"x" }} en salle jeux : + +{% endblock %} diff --git a/inventory/templates/inventory/inventory.html b/inventory/templates/inventory/inventory.html index 2b25794..64a4d68 100644 --- a/inventory/templates/inventory/inventory.html +++ b/inventory/templates/inventory/inventory.html @@ -3,10 +3,24 @@ {% block "content" %}

Inventaire du club Jeux

- Il y a {{ game_list|length }} jeux en salle jeux : - +
+ + Liste des catégories +

+ Chaque jeu est rangé dans une unique catégorie comme en salle Jeux +

+
+ + Liste des tags +

+ Chaque jeu est marqué par tous les tags qui lui correspondent +

+
+ + Liste alphabétique +

+ La liste complète des jeux de la ludothèque +

+
+
{% endblock %} diff --git a/inventory/templates/inventory/tag.html b/inventory/templates/inventory/tag.html new file mode 100644 index 0000000..fd8b6f5 --- /dev/null +++ b/inventory/templates/inventory/tag.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block "content" %} +

{{ tag.name }}

+ + {% with game_list=tag.game_set.all %} + Il y a {{ game_list|length }} jeu{{ game_list|pluralize:"x" }} marqué{{ game_list|pluralize }} avec ce tag : + + {% endwith %} +{% endblock %} diff --git a/inventory/templates/inventory/tag_list.html b/inventory/templates/inventory/tag_list.html new file mode 100644 index 0000000..d1aba79 --- /dev/null +++ b/inventory/templates/inventory/tag_list.html @@ -0,0 +1,12 @@ +{% extends "base.html" %} + +{% block "content" %} +

Liste des tags

+ + Il y a {{ tag_list|length }} tag{{ tag_list|pluralize }} dans la ludothèque : + +{% endblock %} diff --git a/inventory/urls.py b/inventory/urls.py index 45fc639..de16a07 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -1,9 +1,22 @@ from django.urls import path -from .views import InventoryView, GameView +from .views import ( + InventoryView, + CategoryListView, + CategoryView, + TagListView, + TagView, + GameListView, + GameView, +) app_name = "inventory" urlpatterns = [ path("", InventoryView.as_view(), name="inventory"), - path("/", GameView.as_view(), name="game"), + path("category/", CategoryListView.as_view(), name="category_list"), + path("category//", CategoryView.as_view(), name="category"), + path("tag/", TagListView.as_view(), name="tag_list"), + path("tag//", TagView.as_view(), name="tag"), + path("game/", GameListView.as_view(), name="game_list"), + path("game//", GameView.as_view(), name="game"), ] diff --git a/inventory/views.py b/inventory/views.py index 9b86a17..f59cd2f 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1,12 +1,36 @@ -from django.views.generic import ListView, DetailView -from .models import Game +from django.views.generic import TemplateView, ListView, DetailView +from .models import Category, Tag, Game -class InventoryView(ListView): - model = Game +class InventoryView(TemplateView): template_name = "inventory/inventory.html" +class CategoryListView(ListView): + model = Category + template_name = "inventory/category_list.html" + + +class CategoryView(DetailView): + model = Category + template_name = "inventory/category.html" + + +class TagListView(ListView): + model = Tag + template_name = "inventory/tag_list.html" + + +class TagView(DetailView): + model = Tag + template_name = "inventory/tag.html" + + +class GameListView(ListView): + model = Game + template_name = "inventory/game_list.html" + + class GameView(DetailView): model = Game template_name = "inventory/game.html" diff --git a/mainsite/scss/style.scss b/mainsite/scss/style.scss index 7a54ca8..cc555ec 100644 --- a/mainsite/scss/style.scss +++ b/mainsite/scss/style.scss @@ -248,9 +248,13 @@ iframe { } img { - max-width: 50%; + width: 50%; border: solid $indexbar_bg_color_1; border-radius: 10px; + + @media (max-width: 500px) { + width: 75%; + } } #details { diff --git a/mainsite/static/css/style.css b/mainsite/static/css/style.css index fae83c5..27723c2 100644 --- a/mainsite/static/css/style.css +++ b/mainsite/static/css/style.css @@ -396,9 +396,12 @@ iframe { #game_infos { flex-direction: column; } } #game_infos img { - max-width: 50%; + width: 50%; border: solid rgba(107, 184, 196, 0.75); border-radius: 10px; } + @media (max-width: 500px) { + #game_infos img { + width: 75%; } } #game_infos #details { flex: 1 0 auto; text-align: left; diff --git a/mainsite/templates/base.html b/mainsite/templates/base.html index ca14787..88d3ef1 100644 --- a/mainsite/templates/base.html +++ b/mainsite/templates/base.html @@ -1,5 +1,3 @@ -{% load static %} - diff --git a/mainsite/templates/partials/head.html b/mainsite/templates/partials/head.html index f60515d..6f29c80 100644 --- a/mainsite/templates/partials/head.html +++ b/mainsite/templates/partials/head.html @@ -4,5 +4,5 @@ GestioJeux - +