From 39e1538fc5e14c0299ceef58fdbc4792bbe76a80 Mon Sep 17 00:00:00 2001 From: luxcem Date: Fri, 13 Mar 2015 17:07:22 +0100 Subject: [PATCH] Adds a view for representatives details and a (embryonic) search --- .gitignore | 2 +- memopol/.gitignore | 1 + memopol/{settings.py => settings.py.example} | 10 +++- .../memopol_representatives/list.haml | 26 ++++++---- .../representative_block.haml | 17 ++++--- .../representative_block.html | 11 +++++ .../memopol_representatives/search.html | 6 +++ .../memopol_representatives/view.html | 36 ++++++++++++++ memopol_representatives/urls.py | 6 ++- memopol_representatives/views.py | 48 ++++++++++++++++--- static/.gitignore | 1 + 11 files changed, 138 insertions(+), 26 deletions(-) create mode 100644 memopol/.gitignore rename memopol/{settings.py => settings.py.example} (94%) create mode 100644 memopol_representatives/templates/memopol_representatives/representative_block.html create mode 100644 memopol_representatives/templates/memopol_representatives/search.html create mode 100644 memopol_representatives/templates/memopol_representatives/view.html create mode 100644 static/.gitignore diff --git a/.gitignore b/.gitignore index b222322..2b5e86f 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,4 @@ coverage.xml *.mo *.pot # Django stuff: -*.log \ No newline at end of file +*.log diff --git a/memopol/.gitignore b/memopol/.gitignore new file mode 100644 index 0000000..fce19e4 --- /dev/null +++ b/memopol/.gitignore @@ -0,0 +1 @@ +settings.py diff --git a/memopol/settings.py b/memopol/settings.py.example similarity index 94% rename from memopol/settings.py rename to memopol/settings.py.example index 0e89fab..46558a7 100644 --- a/memopol/settings.py +++ b/memopol/settings.py.example @@ -68,9 +68,17 @@ WSGI_APPLICATION = 'memopol.wsgi.application' # https://docs.djangoproject.com/en/1.7/ref/settings/#databases DATABASES = { - 'default': { + 'sqlite': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + }, + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'memopol_dev', + 'USER': 'dj', + 'PASSWORD': "test", + 'HOST': 'localhost', + 'PORT': '', } } diff --git a/memopol_representatives/templates/memopol_representatives/list.haml b/memopol_representatives/templates/memopol_representatives/list.haml index 5dad905..b806135 100644 --- a/memopol_representatives/templates/memopol_representatives/list.haml +++ b/memopol_representatives/templates/memopol_representatives/list.haml @@ -1,12 +1,20 @@ - extends "base.html" - block content - .row - .large-8.columns - - for representative in representative_list - .row - - include 'memopol_representatives/representative_block.html' - - .large-4.columns - %p - hello + - include 'memopol_representatives/search.html' + + %table + - for representative in representatives + %tr + - include 'memopol_representatives/representative_block.html' + + .pagination + %span.step-links + - if representatives.has_previous + %a{'href': '?={queries.urlencode}&page=={representatives.previous_page_number}'} previous + + %span.current + Page ={representatives.number} of ={representatives.paginator.num_pages} + + - if representatives.has_next + %a{'href': '?={queries.urlencode}&page=={representatives.next_page_number}'} next diff --git a/memopol_representatives/templates/memopol_representatives/representative_block.haml b/memopol_representatives/templates/memopol_representatives/representative_block.haml index 9480bb4..a492270 100644 --- a/memopol_representatives/templates/memopol_representatives/representative_block.haml +++ b/memopol_representatives/templates/memopol_representatives/representative_block.haml @@ -1,10 +1,13 @@ -%p.small-2.columns - %img{'src':'={representative.photo}'}/ -%p.small-4.columns - = representative.full_name - [ ={representative.country.code} ] +%td< + %a{'href': "{% url 'representatives.detail' ={representative.id} %}"} + %img{'src':'={representative.photo}'}/ -%p.small-6.columns +%td< + %a{'href': "{% url 'representatives.detail' ={representative.id} %}"} + ={representative.full_name} [={representative.country.code}] + +%td< - for mandate in representative.mandate_set.all - ={mandate.group.name} - ={mandate.end_date} - ={mandate.active} + ={mandate.group.name} %br/a + diff --git a/memopol_representatives/templates/memopol_representatives/representative_block.html b/memopol_representatives/templates/memopol_representatives/representative_block.html new file mode 100644 index 0000000..f632555 --- /dev/null +++ b/memopol_representatives/templates/memopol_representatives/representative_block.html @@ -0,0 +1,11 @@ + + + + + + + + {{ representative.full_name }} [{{ representative.country.code }}] + + + diff --git a/memopol_representatives/templates/memopol_representatives/search.html b/memopol_representatives/templates/memopol_representatives/search.html new file mode 100644 index 0000000..bd2b291 --- /dev/null +++ b/memopol_representatives/templates/memopol_representatives/search.html @@ -0,0 +1,6 @@ +
+ {% csrf_token %} + + + +
diff --git a/memopol_representatives/templates/memopol_representatives/view.html b/memopol_representatives/templates/memopol_representatives/view.html new file mode 100644 index 0000000..13a8d24 --- /dev/null +++ b/memopol_representatives/templates/memopol_representatives/view.html @@ -0,0 +1,36 @@ +{% extends 'base.html' %} + +{% block content %} + +Back + +

+ +

+ +

{{ representative.full_name }}

+ +

+ {{ representative.country.name }} {{ representative.gender }}
+ Born in {{ representative.birth_place }} the {{ representative.birth_date }}
+

+ +

Mandates

+{% for mandate in representative.mandate_set.all %} +
+

+ {{ mandate.group.name }} + + {{ mandate.role }} + +

+

+ {{ mandate.begin_date }} to {{ mandate.end_date }}
+ {{ mandate.group.kind }} : {{ mandate.group.name }} ({{ mandate.group.abbreviation }})
+ Constituency : {{ mandate.constituency.name }}
+

+
+
+{% endfor %} + +{% endblock %} diff --git a/memopol_representatives/urls.py b/memopol_representatives/urls.py index 246c531..53be245 100644 --- a/memopol_representatives/urls.py +++ b/memopol_representatives/urls.py @@ -2,6 +2,8 @@ from django.conf.urls import patterns, include, url from memopol_representatives import views -urlpatterns = patterns('', - url(r'^$', views.IndexView.as_view(), name='index'), +urlpatterns = patterns( + '', + url(r'^$', views.index, name='index'), + url(r'^view/(?P\d+)$', views.view, name='view'), ) diff --git a/memopol_representatives/views.py b/memopol_representatives/views.py index e6b0075..af8a34b 100644 --- a/memopol_representatives/views.py +++ b/memopol_representatives/views.py @@ -1,11 +1,47 @@ -# from django.shortcuts import render -from django.views import generic +from django.shortcuts import render, get_object_or_404 +from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +from django.db.models import Q from representatives.models import Representative -class IndexView(generic.ListView): - template_name = 'memopol_representatives/list.html' +def index(request): + context = {} + if request.GET.get('search'): + search = request.GET.get('search') + representative_list = Representative.objects.filter( + Q(full_name__icontains=search) + ) + queries_without_page = request.GET.copy() + if 'page' in queries_without_page: + del queries_without_page['page'] + context['queries'] = queries_without_page + else: + representative_list = Representative.objects.all() - def get_queryset(self): - return Representative.objects.all() + paginator = Paginator(representative_list, 5) + + page = request.GET.get('page') + try: + representatives = paginator.page(page) + except PageNotAnInteger: + representatives = paginator.page(1) + except EmptyPage: + representatives = paginator.page(paginator.num_pages) + + context['representatives'] = representatives + return render( + request, + 'memopol_representatives/list.html', + context + ) + + +def view(request, num): + representative = get_object_or_404(Representative, pk=num) + + return render( + request, + 'memopol_representatives/view.html', + {'representative': representative} + ) diff --git a/static/.gitignore b/static/.gitignore new file mode 100644 index 0000000..3d21324 --- /dev/null +++ b/static/.gitignore @@ -0,0 +1 @@ +CACHE -- GitLab