Daha sonra talepte bulunan mağaza verilerine erişmek istiyorsanız, bir yere koymanız gerekir. Django bu arşivlemek için çeşitli yollar sunar:
1) Sen sorgu depolamak için sessions kullanabilirsiniz: Her ziyaretçinin boş oturum nesnesi alacak sitenizi ziyaret ve davranan bu nesnenin içinde ne istersen saklayabilirsiniz Bir dict gibi. Geri Çekilme: Tek bir ziyaretçi, aynı anda sayfalama ile birden fazla arama yapamaz.
2) Tanımlama bilgilerini kullan: İstemci tarafında saklanan bir çerezi ayarlarsanız, tarayıcı çerine erişebildiğiniz her istek için tanımlama bilgilerini ekler. Çerezler sunuculara göre daha kolaydır, çünkü sunucuda onlar için oturum yöneticisi gerekmez, ancak çerezlerde saklanan veriler istemciye görünür (ve düzenlenebilir). Dezavantajı: önceki gibi.
3) Gizli alanları kullan: Arama sonucu sayfanızda bazı gizli alanlara sahip bir form ekleyebilir ve sorguyu içlerinde saklayabilirsiniz. Ardından, formu gönderdiğinizde istemci sorguyu yeniden gönderir. Dezavantaj: Sayfanızdaki sayfalara sayfalama için gönder butonlu bir form kullanmalısınız (basit bağlantılar işe yaramaz).
4) Sorgu içeren bağlantılar oluşturun: POST kullanmak yerine GET kullanabilirsiniz. Örneğin, "/search/hello+world/?order=votes"
ve "/search/hello+world/2/?order-votes"
gibi "paginated links" gibi bir bağlantınız olabilir. Daha sonra sorgu, URL'den kolayca alınabilir. Geri Çekilme: GET üzerinden gönderebileceğiniz maksimum veri miktarı sınırlıdır (Ancak bu, basit bir arama için sorun olmamalıdır).
5) Bir kombinasyon kullanın: Tüm verileri bir oturumda veya veritabanında depolamak ve URL'ye yerleştirebileceğiniz oluşturulmuş bir anahtar aracılığıyla bunlara erişmek isteyebilirsiniz. URL'ler daha sonra "/search/029af239ccd23/2"
(2. sayfa) gibi görünebilir ve daha önce sakladığınız büyük miktarda veriye erişmek için anahtarı kullanabilirsiniz. Bu, çözüm 1'in yanı sıra çözüm 1'in dezavantajını ortadan kaldırır. Yeni dezavantaj: Eğer o zaman diğer isteklere geçirilen olabilir istemci tarafında bazı js-değişkenler, iç veri saklayabilir Ve ajax beri sadece sonuç listesini güncelleyecek ajax ile. çok iş :)
6) AJAX kullanın
sayesinde bu yararlıdır. Sadece bu soruyu biraz daha açmak için: paginator sınıfı için amaçlanan kullanım bu mu? Bence ilk arama formu sonra şablonu ilk sayfa için paginator.page() nesnesi gönderir işler. Sonuçlar listesi o sayfa için object_list'ten oluşturulur. Tüm arama sonucu kümesini gönderemem ve garip bir şekilde, her sayfa için aramayı tekrar göndermeden bir sayfa gönderemem garip görünüyor. Bu sınıf için amaçlanan kullanım ise, onunla çalışabilirim. Sadece belli bir şeyi kaçırmadığımdan emin olmak istiyorum. Teşekkürler! – andyashton
Evet, amaçlanan kullanım budur. Django'nun bir web çerçevesi olduğunu ve doğası gereği web isteklerinin durum bilgisi olmadığını unutmayın. Yani eğer eyaleti korumak istiyorsan, onu bir yere saklaman gerekecek - ve tux21b sana nerede olduğuna dair bazı seçenekler verdi. –
Çok yardımcı, ikinize de teşekkürler. – andyashton