#34518: `random` and `first`/`last` filters have different behavior on empty
lists.
-------------------------------------+-------------------------------------
Reporter: Алексей | Owner: nobody
Поклонский |
Type: Bug | Status: new
Component: Template | Version: 4.0
system | Keywords: random, first,
Severity: Normal | last, list, templates
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
`first`/`last` filters applied to a empty list do not raise anything and
just returns a empty page. Example:
{{{
{{ list_var|last }}
}}}
Rendered with:
{{{
def index(request):
return render(request, 'polls/index.html', context={"list_var": []})
}}}
Will result in empty page:
{{{
[26/Apr/2023 09:15:49] "GET / HTTP/1.1" 200 0
}}}
As I undestand, 0 means no any characters in response content.
The similar situation is with the `first` tag:
{{{
{{ list_var|first }}
}}}
While the `random` tag raises the IndexError and causes the server to
response 500.
Code snippet:
{{{
{{ list_var|random }}
}}}
In console we have:
{{{
Internal Server Error: /
Traceback (most recent call last):
File "/home/alex/.local/lib/python3.9/site-
packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/alex/.local/lib/python3.9/site-
packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
File "/home/alex/Документы/django-example/polls/views.py", line 8, in
index
return render(request, 'polls/index.html', context={"list_var": []})
File "/home/alex/.local/lib/python3.9/site-
packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request,
using=using)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 176, in render
return self._render(context)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 168, in _render
return self.nodelist.render(context)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 977, in render
return SafeString(''.join([
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 978, in <listcomp>
node.render_annotated(context) for node in self
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 938, in render_annotated
return self.render(context)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 1038, in render
output = self.filter_expression.resolve(context)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/base.py", line 728, in resolve
new_obj = func(obj, *arg_vals)
File "/home/alex/.local/lib/python3.9/site-
packages/django/template/defaultfilters.py", line 616, in random
return random_module.choice(value)
File "/usr/lib/python3.9/random.py", line 347, in choice
return seq[self._randbelow(len(seq))]
IndexError: list index out of range
[26/Apr/2023 09:30:03] "GET / HTTP/1.1" 500 112925
}}}
Django version ''4.0.1'', python version Python ''3.9.2''
Expected behavior:
Since all `first`, `last` and `random` tags returns an element from the
list, their conduct in the case when the list is empty must be the same:
either all 3 of them should raise an error or all 3 should return empty
content.
--
Ticket URL: <https://code.djangoproject.com/ticket/34518>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070187bcee592e-b4ddee1e-d742-46d9-aea5-572db609712d-000000%40eu-central-1.amazonses.com.