From 5c5493387bbcd6d0b025d395df77ae48af65508e Mon Sep 17 00:00:00 2001 From: Bobby Date: Thu, 29 Dec 2022 06:07:39 -0500 Subject: Some makeshift search page.; I'm tired now. Maybe I'll watch Konosuba --- blog/urls.py | 3 ++- blog/views.py | 40 +++++++++++++++++++++++++++++++++++- templates/blog/partials/sidebar.html | 4 ++-- templates/blog/search.html | 40 ++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 templates/blog/search.html diff --git a/blog/urls.py b/blog/urls.py index 03e6c13d..526093cc 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -6,7 +6,8 @@ app_name = 'blog' urlpatterns = [ path('', views.home, name='home'), path('account', views.account, name='account'), - path('register/', views.register, name='register'), + path('register', views.register, name='register'), + path('search', views.search, name='search'), path('articles/', views.post, name='post'), path('articles//comment', views.comment, name='comment'), path('articles//edit_comment', views.edit_comment, name='edit_comment'), diff --git a/blog/views.py b/blog/views.py index fd8d76f5..96faa177 100644 --- a/blog/views.py +++ b/blog/views.py @@ -5,7 +5,7 @@ from users.models import UserProfile import hashlib from random import choice from string import ascii_letters, digits -from .models import Post, Comment +from .models import Category, Post, Comment from .context_processors import recent_posts, avatar_list from announcements.models import Announcement from users.forms import RegisterForm @@ -167,3 +167,41 @@ def delete_comment(request, slug, comment_id): return HttpResponse('Comment not found!', status=404) else: return redirect('blog:home') + + +def search(request): + categories = Category.objects.all() + tags = request.GET.get('tags') + category = request.GET.get('category') + query = request.GET.get('query') + search_in_body = False + + # First check for query constraints + if len(query) == 0: + return render(request, 'blog/search.html', {'title': 'Search', 'posts': [], 'categories': categories, 'tags': tags, 'cate': category, 'query': query}) + + if len(query) < 3: + return render(request, 'blog/search.html', {'title': 'Search', 'posts': [], 'categories': categories, 'tags': tags, 'cate': category, 'query': query, 'error': 'Query must be at least 3 characters long'}) + + if len(query) > 100: + search_in_body = True + + # public posts which contain the query in the title or body + posts = Post.objects.filter(is_public=True, title__icontains=query) if not search_in_body else Post.objects.filter(is_public=True, body__icontains=query) | Post.objects.filter(is_public=True, title__icontains=query) + + # filter by category slug + if category: + posts = posts.filter(category__slug=category) + else: + category = '' + + # filter by tags + if tags: + posts = posts.filter(tags__name__in=tags.split(',')) + else: + tags = '' + + # order by date + posts = posts.order_by('-date') + return render(request, 'blog/search.html', {'title': 'Search', 'posts': posts, 'categories': categories, 'tags': tags, 'cate': category, 'query': query}) + diff --git a/templates/blog/partials/sidebar.html b/templates/blog/partials/sidebar.html index 00be99cc..b7903bff 100644 --- a/templates/blog/partials/sidebar.html +++ b/templates/blog/partials/sidebar.html @@ -47,8 +47,8 @@

Search

-
- + +
diff --git a/templates/blog/search.html b/templates/blog/search.html new file mode 100644 index 00000000..f9eaa71e --- /dev/null +++ b/templates/blog/search.html @@ -0,0 +1,40 @@ +{% extends 'blog/partials/base.html' %} {% block content %} + +
+

Combine your search terms:

+
+ + + + + + + +
+
+ +{% if posts %} +
+

Search results for "{{ query }}"

+
    + {% for post in posts %} +
  • + {{ post.title }} +

    {{ post.excerpt }}

    +
  • + {% endfor %} +
+
+{% else %} +
+

No results found for "{{ query }}"

+
+{% endif %} + + +{% endblock %} \ No newline at end of file -- cgit v1.2.3