Skip to content

Commit

Permalink
add search in post
Browse files Browse the repository at this point in the history
  • Loading branch information
dori-dev committed Feb 5, 2023
1 parent b9c282a commit 52e2335
Show file tree
Hide file tree
Showing 12 changed files with 89 additions and 2 deletions.
2 changes: 2 additions & 0 deletions src/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
'language.apps.LanguageConfig',
'home.apps.HomeConfig',
'comment.apps.CommentConfig',
'search.apps.SearchConfig',
]

MIDDLEWARE = [
Expand Down Expand Up @@ -89,6 +90,7 @@
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'custom.context_processors.access_data',
'search.context_processors.search',
],
},
},
Expand Down
1 change: 1 addition & 0 deletions src/config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
path('posts/', include('post.urls', namespace='post')),
path('users/', include('contact.urls', namespace='user')),
path('actions/', include('action.urls', namespace='action')),
path('search/', include('search.urls', namespace='search')),
path('__debug__/', include('debug_toolbar.urls')),
]

Expand Down
Empty file added src/search/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions src/search/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
6 changes: 6 additions & 0 deletions src/search/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class SearchConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'search'
8 changes: 8 additions & 0 deletions src/search/context_processors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from . import forms


def search(request):
form = forms.SearchForm()
return {
'search_form': form,
}
26 changes: 26 additions & 0 deletions src/search/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from django import forms


class SearchForm(forms.Form):
search = forms.CharField()

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].error_messages = {
'required': 'پر کردن این فیلد ضروری است!',
'invalid': 'این فیلد رو به درستی وارد کن!',
}
# search
search = self.fields['search']
search.widget.attrs['class'] = 'form-control me-2 search-input rtl'
search.widget.attrs['type'] = 'search'
search.widget.attrs['dir'] = 'auto'
search.widget.attrs['aria-label'] = 'Search'
search.widget.attrs[
'placeholder'
] = 'جستجو...'
search.error_messages = {
'required': 'پست ات حتما باید عنوان داشته باشه!',
'max_length': 'توضیحات پست ات خیلی زیاد شد!',
}
3 changes: 3 additions & 0 deletions src/search/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.db import models

# Create your models here.
3 changes: 3 additions & 0 deletions src/search/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
10 changes: 10 additions & 0 deletions src/search/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path

from . import views


app_name = 'search'

urlpatterns = [
path('', views.SearchView.as_view(), name='search'),
]
25 changes: 25 additions & 0 deletions src/search/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from django.views import generic

from . import forms
from post.models import Post


class SearchView(generic.ListView):
form_class = forms.SearchForm
model = Post
context_object_name = 'posts'
paginate_by = 24

def get_queryset(self):
queryset = super().get_queryset()
query = self.request.GET.get('search')
if query:
queryset = queryset.filter(
description__contains=query,
)
return queryset

def get_template_names(self):
if self.request.headers.get('x-requested-with') == 'XMLHttpRequest':
return 'post/add-posts.html'
return 'post/list.html'
4 changes: 2 additions & 2 deletions src/templates/inc/navbar.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@
</ul>
</li>
</ul>
<form class="d-flex custom-search" role="search">
<input class="form-control me-2 search-input" type="search" placeholder="جستجو..." aria-label="Search">
<form action="{% url 'search:search' %}" class="d-flex custom-search" role="search" method="get">
{{ search_form.search }}
<button class="btn btn-success" type="submit">جستجو</button>
</form>
</div>
Expand Down

0 comments on commit 52e2335

Please sign in to comment.