Ticket #16647: django-defaultfilters-random-shuffle.path

File django-defaultfilters-random-shuffle.path, 1.4 KB (added by h3, 13 years ago)
Line 
1Index: template/defaultfilters.py
2===================================================================
3--- template/defaultfilters.py (revision 16332)
4+++ template/defaultfilters.py (working copy)
5@@ -15,6 +15,7 @@
6 from django.utils.html import conditional_escape
7 from django.utils.safestring import mark_safe, SafeData
8 from django.utils.translation import ugettext, ungettext
9+from django.db.models.query import QuerySet
10
11 register = Library()
12
13@@ -529,10 +530,24 @@
14 length_is.is_safe = False
15
16 def random(value):
17- """Returns a random item from the list."""
18- return random_module.choice(value)
19+ """Returns a random item from a list or QuerySet"""
20+ if not isinstance(value, QuerySet):
21+ return random_module.choice(value)
22+ else:
23+ if len(value) == 0:
24+ return []
25+ return value.order_by('?')[0]
26 random.is_safe = True
27
28+def shuffle(value):
29+ """Returns a randomized list or QuerySet"""
30+ if not isinstance(value, QuerySet):
31+ random_module.shuffle(value)
32+ return value
33+ else:
34+ return value.order_by('?')
35+shuffle.is_safe = True
36+
37 def slice_(value, arg):
38 """
39 Returns a slice of the list.
40@@ -914,6 +929,7 @@
41 register.filter(pprint)
42 register.filter(removetags)
43 register.filter(random)
44+register.filter(shuffle)
45 register.filter(rjust)
46 register.filter(safe)
47 register.filter(safeseq)
Back to Top