• 1399/05/09

صفحه بندی نتایج سرچ محصولات :

سلام استاد

برای نتایج سرچ محصول همه چی درست کار میکنه الا اینکه وقتی نتیجه بیش از یک صفحه میشه اگر روی صفحه دوم بزنی خطای 404 میده. هر کاری کردم درست نشد!!

  • 1399/05/09
  • ساعت 08:57

سلام

پروژه بنده هم همین مشکل رو داره؟


  • 1399/05/09
  • ساعت 09:01

پروژه شما نتایج سرچ رو روی 6 مورد در هر صفحه گذاشتید داخل ویدیو و امتحان نکردید این مورد رو و چون کلا تعداد محصولاتتون کمه، نتایج کمی دارید البته برای دسته بندی محصولات درست کار میکنه، ولی سرچ نه

علتشم اینه صفحه دوم که میزنیم متن url عوض میشه و اون متن سرچ شده داخل url نمیاد برای بار دوم

 


  • 1399/05/10
  • ساعت 07:50

واسه ی من میاره اما با آیتم های تکراری و URL هم در صفحه دوم به این شکل میشه:

http://127.0.0.1:8000/products/search/?page=2


  • 1399/05/10
  • ساعت 11:34

خوب برای شما هم ایراد داره چون اون کويری که برای سرچ لازم هست توی ادرس نیست.

برای من اولش مشخصه که چنتا صفحه هست ولی برای صفحه دم اطلاعات خالی میاره


  • 1399/05/11
  • ساعت 14:25

سلام. ببخشید مشکل شما رفع نشد؟ چون مال من هم وقتی میشه دو صفحه، کوئری برای صفحه دوم به این صورت در میاد:

http://127.0.0.1:8000/products/search/?page=2

و نتیجه اشتباهه!


  • 1399/05/11
  • ساعت 15:10

url تولید شده باید به اینصورت باشه :

http://127.0.0.1:8000/products/search/?page=2&?q=django

 

حالا یک جوری بهش بفهمونین که به این شکل پیاده کنه.

واسه ی مثال دیگه توی همین تاپ لرن c# سرچ کنین و وارد صفحات دیگه بشین.اول شماره صفحه مشخص کرده بعد با & q=item مشخص کرده.


  • 1399/05/11
  • ساعت 15:40

ببخشید شما میدونید چطور باید انجامش داد؟

 


  • 1399/05/11
  • ساعت 15:42

تا حدودی آره اما متاسفانه نمیدونم چطوری مقدار q توی product_list.html دریافت کنم نا توی href بزارمش.اگه راهشو پیدا کردم میزارم اینجا.


  • 1399/05/11
  • ساعت 16:54

من خیلی سرچ کردم و متاسفانه از طریق کلاس ویو نتونستم حلش کنم ولی فانکشن ویو حلش کردم و یه سری تغییرات دادم 

اول برای 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  اضافه کنم ولی دوست داشتم کلاس ویو برم که هر کاری کردم کويری رو نمیگرفت


  • 1399/05/11
  • ساعت 18:09

من راه کلاس ویو رو هم پیدا کردم

برای گرفتن کويری توی 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 }}"

:))))))


  • 1399/05/11
  • ساعت 18:35

سلام. خیییلی ممنون. درست شد!


  • 1399/05/12
  • ساعت 05:30

آره خودشه ایول دمت گرم


  • 1399/05/12
  • ساعت 17:28

خواهش میکنم  :)))


logo-samandehi