Вам не нужно использовать метод POST , чтобы передать свои аргументы вашему views.py
.
Следуйте приведенному ниже примеру и перепишите свой view
и свой HTML form
.
Вот простая форма для ввода пользователем слова для поиска:
<form method="get" action="">
<input type="text" name="search4" class="search_input" placeholder="Search" required="required">
<input type="submit" value="Search">
</form>
Следующим шагом является то, что вы должны проверить ввод в вашем views.py
, мы назвали входную метку name = "search4" , поэтому мы проверяем, есть ли какие-либо входные данные в нашей форме, используя этот код в наш views.py
:
from django.db.models import Q
from django.core.paginator import Paginator
def search(request):
query = request.GET.get("search4")
if query:
queryset = ResourceBase.objects.objects.all() # this will get all of your object of your model
results = queryset.filter(Q(country_name__iexact=query)).all()
number_of_objects = results.count() # get the exact number of object to show in your html file
paginator = Paginator(results, 12) # Show 12 contacts per page
page_var = 'page' # this will use for pagination in your html file
page = request.GET.get(page_var) # this will use for pagination in your html file
contacts = paginator.get_page(page) # send only 12 object to your html file to show to user
context = {
"items": contacts,
"key": str(query),
'page': page_var,
"number_of_objects": number_of_objects,
}
return render(request=request, template_name='search.html', context=context, content_type=None, status=None,
using=None)
else:
... # if user didn't enter anything to search
После получения и поиска пользовательского ввода в вашей базе данных, вы должны показать его пользователю в файле search.html
, например:
{% for item in items %}
<div>
<div>
<div class="product_title">{{ item.title }}</div> # show the part that you want the users to see
... # rest of your item parts to show
</div>
</div>
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if items.has_previous %} # check the pagination that if there is perivious pages
<a href="?{{ page }}=1">« first</a>
<a href="?{{ page }}={{ items.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ items.number }} of {{ items.paginator.num_pages }} # example of result : Page 1 of 13
</span>
{% if items.has_next %}
<a href="?{{ page }}={{ items.next_page_number }}"</a> # check the pagination that if there is any next or perivious pages
<a href="?{{ page }}={{ items.paginator.num_pages }}">last »</a> # a link to last page
{% endif %}
</span>
{{ pagination }}
это базовая страница поиска с Paginator , если вам нужна дополнительная помощь или вопрос, я буду рад помочь.