From cc313a50f31acac509f595d0dd475df0f79e002f Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sun, 17 Dec 2017 10:35:21 +0100 Subject: [PATCH 1/5] add an index view and a coresponding template --- .../webshop/templates/webshop/index.html | 24 +++++++++++++++++++ django/didgeridoo/webshop/views.py | 19 +++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 django/didgeridoo/webshop/templates/webshop/index.html diff --git a/django/didgeridoo/webshop/templates/webshop/index.html b/django/didgeridoo/webshop/templates/webshop/index.html new file mode 100644 index 0000000..40a21d0 --- /dev/null +++ b/django/didgeridoo/webshop/templates/webshop/index.html @@ -0,0 +1,24 @@ + + + + + +
+

Music Shop

+ {% if parent_category_list %} + + {% else %} +

No categories are available.

+ {% endif %} +
+ + diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index 295a80f..24a8d37 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -1,8 +1,23 @@ -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render from django.http import HttpResponse +from django.template import loader + +from .models import Article, Category, ArticleStatus # Create your views here. def index(request): - return HttpResponse("Hello, world. You're at the polls index.") + parent_category_list = Category.objects.filter(parent_category=None) + category_list = {} + + for i in parent_category_list: + category = Category.objects.filter(parent_category=i.id) + category_list[i] = category + + template = loader.get_template('webshop/index.html') + context = { + 'category_list': category_list, + 'parent_category_list': parent_category_list, + } + return HttpResponse(template.render(context, request)) From a73f48a40aa3d6b0d73157e6270b14d5091ac1ef Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sun, 17 Dec 2017 10:35:46 +0100 Subject: [PATCH 2/5] point the project root to the webshop app --- django/didgeridoo/didgeridoo/urls.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/django/didgeridoo/didgeridoo/urls.py b/django/didgeridoo/didgeridoo/urls.py index ae9b924..1eef47b 100644 --- a/django/didgeridoo/didgeridoo/urls.py +++ b/django/didgeridoo/didgeridoo/urls.py @@ -17,6 +17,7 @@ from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ - url(r'^webshop/', include('webshop.urls')), + url(r'', include('webshop.urls')), + url(r'^admin/', admin.site.urls), url(r'^admin/', admin.site.urls), ] From 7c5af973f2ba39491af65af8f87954ba9087ad9a Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sun, 17 Dec 2017 10:36:44 +0100 Subject: [PATCH 3/5] add a view to list all articles in a category --- .../webshop/templates/webshop/category.html | 21 +++++++++++++++++++ django/didgeridoo/webshop/urls.py | 3 +++ django/didgeridoo/webshop/views.py | 15 +++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 django/didgeridoo/webshop/templates/webshop/category.html diff --git a/django/didgeridoo/webshop/templates/webshop/category.html b/django/didgeridoo/webshop/templates/webshop/category.html new file mode 100644 index 0000000..7e42cfa --- /dev/null +++ b/django/didgeridoo/webshop/templates/webshop/category.html @@ -0,0 +1,21 @@ + + + + + + + +
+

{{ category.name }}

+{% if article_list %} + +{% else %} +

There are no articles in this category.

+{% endif %} +
+ + diff --git a/django/didgeridoo/webshop/urls.py b/django/didgeridoo/webshop/urls.py index a3780aa..1e36cbc 100644 --- a/django/didgeridoo/webshop/urls.py +++ b/django/didgeridoo/webshop/urls.py @@ -4,4 +4,7 @@ from . import views urlpatterns = [ url(r'^$', views.index, name='index'), + url(r'^category/(?P[0-9]+)/$', + views.articles_in_category, + name='category'), ] diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index 24a8d37..e39b894 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -21,3 +21,18 @@ def index(request): 'parent_category_list': parent_category_list, } return HttpResponse(template.render(context, request)) + + +def articles_in_category(request, category_id): + selected_category = Category.objects.get(id=category_id) + hidden = ArticleStatus.objects.get(name="hidden") + + article_list = Article.objects.filter( + category=selected_category.id).exclude(status=hidden.id) + + template = loader.get_template('webshop/category.html') + context = { + 'article_list': article_list, + 'category': selected_category, + } + return HttpResponse(template.render(context, request)) From 6894a1bfbad14b5658c0bbcd8cf122b07e2dd00d Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sun, 17 Dec 2017 10:37:04 +0100 Subject: [PATCH 4/5] add a view to show the details of an article --- .../templates/webshop/article_details.html | 15 +++++++++++++++ django/didgeridoo/webshop/urls.py | 3 +++ django/didgeridoo/webshop/views.py | 7 +++++++ 3 files changed, 25 insertions(+) create mode 100644 django/didgeridoo/webshop/templates/webshop/article_details.html diff --git a/django/didgeridoo/webshop/templates/webshop/article_details.html b/django/didgeridoo/webshop/templates/webshop/article_details.html new file mode 100644 index 0000000..aa66890 --- /dev/null +++ b/django/didgeridoo/webshop/templates/webshop/article_details.html @@ -0,0 +1,15 @@ + + + + + +
+

{{ article.name }}

+

Description

+

{{ article.description }}

+

Stock: {{ article.stock }}

+

Status: {{ article.status}}

+

Price: {{ article.price_in_chf }}

+
+ + diff --git a/django/didgeridoo/webshop/urls.py b/django/didgeridoo/webshop/urls.py index 1e36cbc..ae62468 100644 --- a/django/didgeridoo/webshop/urls.py +++ b/django/didgeridoo/webshop/urls.py @@ -4,6 +4,9 @@ from . import views urlpatterns = [ url(r'^$', views.index, name='index'), + url(r'^details/(?P[0-9]+)/$', + views.article_details, + name='details'), url(r'^category/(?P[0-9]+)/$', views.articles_in_category, name='category'), diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index e39b894..7cf7d2a 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -36,3 +36,10 @@ def articles_in_category(request, category_id): 'category': selected_category, } return HttpResponse(template.render(context, request)) + + +def article_details(request, article_id): + article = get_object_or_404(Article, pk=article_id) + return render(request, + 'webshop/article_details.html', + {'article': article}) From e63627ca4ff51bb0f2b71ff94b41b0ec2faf64b2 Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Sun, 17 Dec 2017 19:37:49 +0100 Subject: [PATCH 5/5] fix the category list --- django/didgeridoo/webshop/templates/webshop/index.html | 10 +++++----- django/didgeridoo/webshop/views.py | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/django/didgeridoo/webshop/templates/webshop/index.html b/django/didgeridoo/webshop/templates/webshop/index.html index 40a21d0..721caae 100644 --- a/django/didgeridoo/webshop/templates/webshop/index.html +++ b/django/didgeridoo/webshop/templates/webshop/index.html @@ -5,13 +5,13 @@

Music Shop

- {% if parent_category_list %} + {% if category_list %}
    - {% for parent_category in parent_category_list %} -
  • {{ parent_category.name }}
  • - {% for category in category_list %} + {% for category, sub_category in category_list.items %} +
  • {{ category.name }}
  • + {% for i in sub_category %} {% endfor %} {% endfor %} diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index 7cf7d2a..0db7d06 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -12,13 +12,12 @@ def index(request): category_list = {} for i in parent_category_list: - category = Category.objects.filter(parent_category=i.id) - category_list[i] = category + category_list.update( + {i: Category.objects.filter(parent_category=i.id)}) template = loader.get_template('webshop/index.html') context = { 'category_list': category_list, - 'parent_category_list': parent_category_list, } return HttpResponse(template.render(context, request))