Estoy tratando de elegir 3 números aleatorios de una lista de 20 números.
En views.py, he definido esta variable:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]En mi plantilla index.html:
{{ nums|random }} - {{ nums|random }} - {{ nums|random }}Quiero obtener 3 números diferentes, pero no sé qué filtro/etiqueta aplicar.
Probé declaraciones if/else, for loops (si hay un duplicado, quiero volver a dibujar), pero no estoy satisfecho con los resultados y estoy bastante seguro de que hay un filtro simple para hacerlo.
No creo que haya una manera razonable de hacer esto con los filtros incorporados. Simplemente elegiría los números en la vista y los pasaría al contexto.
Si su representación es consistente y desea hacer esto en muchos lugares, puede escribir una etiqueta de plantilla personalizada, por ejemplo:
import random from django import template register = template.Library() @register.simple_tag def random_sample(population, k): return ' - '.join(str(choice) for choice in random.sample(population, k)) Luego {% random_sample nums 3 %} en su plantilla.
Pero creo que hacerlo en la vista es más simple.
Puede crear su etiqueta de plantilla con esta funcionalidad para resolver su problema.
yourapp/templatetags/custom_choice_tags.py
from django import template import random register = template.Library() @register.assignment_tag def get_three_unique_random_values_from_list(value_list): random_choices = random.sample(value_list, 3) selected_choices = { 'first_choice': random_choices[0], 'second_choice': random_choices[1], 'third_choice': random_choices[2], } return selected_choicesy luego en tu template.html:
{% load custom_choice_tags %} {% get_three_unique_random_values_from_list random_list as random_choices %} {{ random_choices }}la variable random_list se pasaría de su vista al contexto de la plantilla en este ejemplo.