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 :
-
+
{% 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
-
+