From ea7c2dda683b18cb646a5e4a80d1405cd3ec90f9 Mon Sep 17 00:00:00 2001 From: Subin Siby <mail@subinsb.com> Date: Sat, 10 Aug 2019 21:17:38 +0530 Subject: [PATCH 1/2] Add permalinks for announcements --- mainapp/urls.py | 1 + mainapp/views.py | 12 ++++++++- templates/announcements.html | 51 ++++++++++++++++++++++-------------- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/mainapp/urls.py b/mainapp/urls.py index 4a6a86f8b..07367537c 100644 --- a/mainapp/urls.py +++ b/mainapp/urls.py @@ -58,6 +58,7 @@ path('find_people/', views.find_people, name='find_people'), path('missing_persons/', views.missing_persons, name='missing_persons'), path('announcements/', views.announcements, name="Announcements"), + path('announcements/<int:id>', views.announcements_id, name="announcements_id"), path('announcements/<str:filter_>', views.announcements_filter, name="announcements_filter"), path('camp_requirements/', views.camp_requirements_list, name='camp_requirements_list'), path('submission_success/', views.SubmissionSuccess.as_view(), name='submission_success'), diff --git a/mainapp/views.py b/mainapp/views.py index 784910b16..e08bd1804 100644 --- a/mainapp/views.py +++ b/mainapp/views.py @@ -795,7 +795,17 @@ def announcements(request): return render(request, 'announcements.html', {'filter': filter, "data" : link_data, 'pinned_data': pinned_data, 'hashtags':hashtags}) - + +def announcements_id(request,id): + link_data = Announcements.objects.filter(id=id).all() + + hashtags = get_hashtags(Announcements) + paginator = Paginator(link_data, 10) + page = request.GET.get('page') + link_data = paginator.get_page(page) + return render(request, 'announcements.html', {"data" : link_data, 'hashtags':hashtags, 'id': id}) + + # Function to filter announcements based on hashtag def announcements_filter(request,filter_): link_data = Announcements.objects.filter(is_pinned=False,hashtags__icontains=filter_).order_by('-id').all() diff --git a/templates/announcements.html b/templates/announcements.html index 1a91920c1..77bb0d997 100644 --- a/templates/announcements.html +++ b/templates/announcements.html @@ -10,8 +10,13 @@ </nav> <div class="container text-center"> - <h2 class="main-logo">Important Announcements</h2> + {% if id %} + <h2 class="main-logo">Announcement {{ id }}</h2> + {% else %} + <h2 class="main-logo">Important Announcements</h2> + {% endif %} <div class="announcement-cards"> + {% if not id %} <div class="card"> <span class="card-text">Tags<a href="{% url 'Announcements' %}" class="btn btn-info btn-xs pull-right" role="button">Clear Filters</a></span> @@ -26,15 +31,15 @@ <h2 class="main-logo">Important Announcements</h2> </span> {% endfor %} - </div> + {% endif %} {% for req in pinned_data %} <div class="card priority-very-important"> <span class="card-text"> {{ req.description | safe | urlize | linebreaks }}<br/> </span> <span class="card-priority">Very Important</span><br/> - <span class="card-time">{% bootstrap_icon "time" %} {{ req.dateadded }}</span> + <span class="card-time">{% bootstrap_icon "time" %} <a href="{% url 'announcements_id' req.id %}">{{ req.dateadded }}</a></span> </div> {% endfor %} @@ -44,7 +49,7 @@ <h2 class="main-logo">Important Announcements</h2> {% for req in data %} <div class="card priority-{{ req.get_priority_display.lower }}"> - <span class="card-title">{% bootstrap_icon "time" %} {{ req.dateadded }} <b title="Priority" class="card-priority">{{ req.get_priority_display.upper }} priority</b></span><br/><br/> + <span class="card-title">{% bootstrap_icon "time" %} <a href="{% url 'announcements_id' req.id %}">{{ req.dateadded }}</a> <b title="Priority" class="card-priority">{{ req.get_priority_display.upper }} priority</b></span><br/><br/> <span class="card-text"> {{ req.description | safe | urlize }}<br/> {% if req.image %} @@ -56,7 +61,7 @@ <h2 class="main-logo">Important Announcements</h2> class="btn btn-default card-link">{% bootstrap_icon "download" %} Download</a> {% endif %} </span> - <span class="card-time">{% bootstrap_icon "time" %} {{ req.dateadded }}</span> + <span class="card-time">{% bootstrap_icon "time" %} <a href="{% url 'announcements_id' req.id %}">{{ req.dateadded }}</a></span> {% with req.hashtags|get_list as hashtags_ %} @@ -72,21 +77,27 @@ <h2 class="main-logo">Important Announcements</h2> {% endfor %} </div> - <div class="pagination"> - <span class="step-links"> - {% if data.has_previous %} - <a href="?page=1">« first</a> - <a href="?page={{ data.previous_page_number }}">previous</a> - {% endif %} {% for i in data.paginator.page_range %} {% if data.number == i %} - <a class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></a> - {% else %} - <a href="?page={{ i }}">{{ i }}</a> - {% endif %} {% endfor %} {% if data.has_next %} - <a href="?page={{ data.next_page_number }}">next</a> - <a href="?page={{ data.paginator.num_pages }}">last »</a> - {% endif %} - </span> - </div> + {% if id %} + <div> + <a href="{% url 'Announcements' %}" class="btn btn-primary">See All Announcements</a> + </div> + {% else %} + <div class="pagination"> + <span class="step-links"> + {% if data.has_previous %} + <a href="?page=1">« first</a> + <a href="?page={{ data.previous_page_number }}">previous</a> + {% endif %} {% for i in data.paginator.page_range %} {% if data.number == i %} + <a class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></a> + {% else %} + <a href="?page={{ i }}">{{ i }}</a> + {% endif %} {% endfor %} {% if data.has_next %} + <a href="?page={{ data.next_page_number }}">next</a> + <a href="?page={{ data.paginator.num_pages }}">last »</a> + {% endif %} + </span> + </div> + {% endif %} </div> From a175be57386a0d5c64bbaeda6eca59893b2b9767 Mon Sep 17 00:00:00 2001 From: Subin Siby <mail@subinsb.com> Date: Sat, 10 Aug 2019 21:24:10 +0530 Subject: [PATCH 2/2] Fix pinned items not showing up in filter tags --- mainapp/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mainapp/views.py b/mainapp/views.py index e08bd1804..d893c0a78 100644 --- a/mainapp/views.py +++ b/mainapp/views.py @@ -808,7 +808,7 @@ def announcements_id(request,id): # Function to filter announcements based on hashtag def announcements_filter(request,filter_): - link_data = Announcements.objects.filter(is_pinned=False,hashtags__icontains=filter_).order_by('-id').all() + link_data = Announcements.objects.filter(hashtags__icontains=filter_).order_by('-id').all() # Uncomment next line if you want to show pinned data in filtered view and add pinned data in render JSON # pinned_data = Announcements.objects.filter(is_pinned=True).order_by('-id').all()[:5]