我试图从20个数字列表中选取3个随机数。
在views.py中,我已经定义了这个变量:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
在我的模板index.html中:
{{ nums|random }} - {{ nums|random }} - {{ nums|random }}
我想获得3个不同的数字,但我不知道要应用哪个过滤器/标签。
我已经尝试了if / else语句,for循环,(如果有重复我想要重绘)但我对结果不满意并且我非常确定&和#39;这是一个简单的过滤器。
答案 0 :(得分:1)
我认为使用内置过滤器是合理的方法。我只是在视图中选择数字并将其传递给上下文。
如果您的渲染是一致的,并且您希望在很多地方执行此操作,则可以编写自定义模板标记,例如:
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))
然后在模板中{% random_sample nums 3 %}
。
但我认为在视图中这样做更简单。
答案 1 :(得分:0)
您可以使用此功能创建模板标签以解决您的问题。
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_choices
然后在你的template.html中:
{% load custom_choice_tags %}
{% get_three_unique_random_values_from_list random_list as random_choices %}
{{ random_choices }}
变量random_list将从您的视图传递到此示例中的模板上下文。