shoxer
Haziran 19, 2019, 4:20ös
1
Merhaba, böyle bir viewim var, burada sıralama yapmak istiyorum, ancak alfabetik olması gerekiyor. Bu şekilde yaptığımda türkçe karakterleri sıranın sonuna atıyor. Örnek vermek gerekirse, bir makalemizin adı acele olsun diğeri açlık olsun bu ikisi türkçe olarak arka arkaya gelmesi gerekir ancak açlık olan makale son makalenin (örneğin buda azmak olsun) sonunda çıkıyor. Bu problemi nasıl çözerim? sqlite3 kullanıyorum sanırım ondan kaynaklı
> def a(request):
> keyword = request.GET.get("keyword")
> if keyword:
> makaleler = Makale.objects.filter(title__contains = keyword)
> return render(request,"a.html",{"makaleler":makaleler})
>
> makaleler = Makale.objects.filter(title__startswith="A").order_by("title")
> context = {
> "makaleler":makaleler
> }
> return render(request, "a.html",context)
shoxer
Temmuz 4, 2019, 4:36ös
2
Beyler sorunum hala devam ediyor sanırım sqlite kaynaklı bunun çözümü için yardımcı olabilecek birileri yok mudur?
nwxnk
Temmuz 6, 2019, 9:31öö
3
In [1]: sorted('acele olsun diğeri açlık'.split())
Out[1]: ['acele', 'açlık', 'diğeri', 'olsun']
Python’un sorted
fonksiyonu düzgün çalışıyor gibi görünüyor, sıralama işlemini order_by
yapmak yerine sorted
ile yapmayı deneyebilirsiniz.
aib
Temmuz 6, 2019, 9:59öö
4
SQLite kaynakli ise: sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.12.1 documentation
Calismiyor. Daha iyi test case’ler yazman lazim :) :
>>> sorted(['a', 'b', 'c', 'ç', 'd', 'ı', 'i', 'ö', 'z'])
['a', 'b', 'c', 'd', 'i', 'z', 'ç', 'ö', 'ı']
Ama:
>>> locale.setlocale(locale.LC_ALL, 'tr_TR.UTF-8')
>>> sorted(['a', 'b', 'c', 'ç', 'd', 'ı', 'i', 'ö', 'z'], key=functools.cmp_to_key(locale.strcoll))
['a', 'b', 'c', 'ç', 'd', 'ı', 'i', 'ö', 'z']
Burada comparer alan sort fonksiyonunu key alanla degistirmenin sacmaligini bir kez daha gormus oluyoruz.
1 Beğeni