فهرست منبع

Fixed #34518 -- Fixed crash of random() template filter with an empty list.

David Sanders 1 سال پیش
والد
کامیت
7d0e566208
2فایلهای تغییر یافته به همراه9 افزوده شده و 1 حذف شده
  1. 4 1
      django/template/defaultfilters.py
  2. 5 0
      tests/template_tests/filter_tests/test_random.py

+ 4 - 1
django/template/defaultfilters.py

@@ -628,7 +628,10 @@ def length_is(value, arg):
 @register.filter(is_safe=True)
 def random(value):
     """Return a random item from the list."""
-    return random_module.choice(value)
+    try:
+        return random_module.choice(value)
+    except IndexError:
+        return ""
 
 
 @register.filter("slice", is_safe=True)

+ 5 - 0
tests/template_tests/filter_tests/test_random.py

@@ -24,3 +24,8 @@ class RandomTests(SimpleTestCase):
             "random02", {"a": ["a&b", "a&b"], "b": [mark_safe("a&b"), mark_safe("a&b")]}
         )
         self.assertEqual(output, "a&b a&b")
+
+    @setup({"empty_list": "{{ list|random }}"})
+    def test_empty_list(self):
+        output = self.engine.render_to_string("empty_list", {"list": []})
+        self.assertEqual(output, "")