سلام استاد
برای نتایج سرچ محصول همه چی درست کار میکنه الا اینکه وقتی نتیجه بیش از یک صفحه میشه اگر روی صفحه دوم بزنی خطای 404 میده. هر کاری کردم درست نشد!!
سلام
پروژه بنده هم همین مشکل رو داره؟
پروژه شما نتایج سرچ رو روی 6 مورد در هر صفحه گذاشتید داخل ویدیو و امتحان نکردید این مورد رو و چون کلا تعداد محصولاتتون کمه، نتایج کمی دارید البته برای دسته بندی محصولات درست کار میکنه، ولی سرچ نه
علتشم اینه صفحه دوم که میزنیم متن url عوض میشه و اون متن سرچ شده داخل url نمیاد برای بار دوم
واسه ی من میاره اما با آیتم های تکراری و URL هم در صفحه دوم به این شکل میشه:
خوب برای شما هم ایراد داره چون اون کويری که برای سرچ لازم هست توی ادرس نیست.
برای من اولش مشخصه که چنتا صفحه هست ولی برای صفحه دم اطلاعات خالی میاره
سلام. ببخشید مشکل شما رفع نشد؟ چون مال من هم وقتی میشه دو صفحه، کوئری برای صفحه دوم به این صورت در میاد:
http://127.0.0.1:8000/products/search/?page=2
و نتیجه اشتباهه!
url تولید شده باید به اینصورت باشه :
http://127.0.0.1:8000/products/search/?page=2&?q=django
حالا یک جوری بهش بفهمونین که به این شکل پیاده کنه.
واسه ی مثال دیگه توی همین تاپ لرن c# سرچ کنین و وارد صفحات دیگه بشین.اول شماره صفحه مشخص کرده بعد با & q=item مشخص کرده.
ببخشید شما میدونید چطور باید انجامش داد؟
تا حدودی آره اما متاسفانه نمیدونم چطوری مقدار q توی product_list.html دریافت کنم نا توی href بزارمش.اگه راهشو پیدا کردم میزارم اینجا.
من خیلی سرچ کردم و متاسفانه از طریق کلاس ویو نتونستم حلش کنم ولی فانکشن ویو حلش کردم و یه سری تغییرات دادم
اول برای view همچین چیزی زدم:
def searches(request):
if 'q' in request.GET and request.GET['q']:
page = request.GET.get('page', 1)
query = request.GET['q']
page_obj = Product.objects.search(query)
paginator = Paginator(page_obj, 4) # Show 4 contacts per page
page_obj = paginator.page(page)
context = {'page_obj': page_obj, 'q': query}
return render(request, 'products/product_list.html', context)
else:
return render(request, 'products/product_list.html')
و در نهایت برای product_list.html:
<ul class="pagination">
{% if page_obj.has_previous %}
<li><a href="?{% if q %}q={{ q }}&{% endif %}page={{ page_obj.previous_page_number }}">قبلی</a></li>
{% endif %}
{% for page in page_obj.paginator.page_range %}
{% if page == page_obj.number %}
<li class="active"><a href="?{% if q %}q={{ q }}&{% endif %}page={{ page }}">{{ page }}</a></li>
{% else %}
<li><a href="?{% if q %}q={{ q }}&{% endif %}page={{ page }}">{{ page }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li><a href="?{% if q %}q={{ q }}&{% endif %}page={{ page_obj.next_page_number }}">بعدی</a></li>
{% endif %}
</ul>
اینطوری کار کرد و تونستم کویری به url اضافه کنم ولی دوست داشتم کلاس ویو برم که هر کاری کردم کويری رو نمیگرفت
من راه کلاس ویو رو هم پیدا کردم
برای گرفتن کويری توی html باید این کدها رو داخل html بزنید:
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<a href="?{% if request.GET.q %}q={{ request.GET.q }}&{% endif %}page={{ page_obj.previous_page_number }}">قبلی</a>
</li>
{% endif %}
{% for page in page_obj.paginator.page_range %}
{% if page == page_obj.number %}
<li class="active"><a
href="?{% if request.GET.q %}q={{ request.GET.q }}&{% endif %}page={{ page }}">{{ page }}</a>
</li>
{% else %}
<li>
<a href="?{% if request.GET.q %}q={{ request.GET.q }}&{% endif %}page={{ page }}">{{ page }}</a>
</li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<a href="?{% if request.GET.q %}q={{ request.GET.q }}&{% endif %}page={{ page_obj.next_page_number }}">بعدی</a>
</li>
{% endif %}
</ul>
در واقع اینطوری که من فهمیدم اگر با فانکشن ویو کار میکنید این کد کويری رو پاس میده:
href="?{% if q %}q={{ q }}&{% endif %}page={{ page }}"
اگر با کلاس ویو کار میکنید این کد پایینی کویری رو پاس میده به url ، البته فهمیدم هم برای فانکشن ویو هم کلاس ویو کار میکنه پس بهتره کلا اینو بزنیم که برای جفتشون کافیه:
href="?{% if request.GET.q %}q={{ request.GET.q }}&{% endif %}page={{ page }}"
:))))))
سلام. خیییلی ممنون. درست شد!
آره خودشه ایول دمت گرم
خواهش میکنم :)))