【问题标题】:Showing a random subset of emojis in my custom emoji keyboard (Django web app)在我的自定义表情符号键盘(Django Web 应用程序)中显示随机的表情符号子集
【发布时间】:2016-05-30 23:09:41
【问题描述】:

我有一个包含 52 个表情符号的列表,但我只希望 10 个随机出现在表情符号备忘单/键盘中。

这就是我正在做的事情:

django 视图正在向我的模板传递一个 1 到 52 之间的 10 个随机数的列表,如下所示:context["random"] = random.sample(xrange(1,52),10)

另外,还有一个包含 52 个表情符号的列表正在传递,包含在上下文变量 context["emojis"] 中。此列表如下所示:

( [':)', ':-)', ':=)'], [':(', ':-(', ':=('], [';)', ';-)', ';=)', '(wink)'], [';(', ';-(', ';=(', '(cry)'], [':*', ':-*', ':=*', '(kiss)'], [':|', ':-|', ':=|', '(speechless)'], [':-?', ':?', ':=?', '(think)'], ['|(', '|-(', '|=(', '(dull)'], ['|-)', 'I-)', 'I=)', '(snooze)'], ['])', ']=)', '(grin)'], [':$', ':-$', ':=$', '(blush)'], [':D', ':-D', ':=D', ':d', ':-d', ':=d', '(laugh)'], [':O', ':-O', ':=O', ':o', ':-o', ':=o', '(surprised)'], ['8)', '8-)', '8=)', 'B)', 'B-)', 'B=)', '(cool)'], ['8-|', 'B-|', '8|', 'B|', '8=|', 'B=|', '(nerd)'])

这些不是全部 52 个表情符号,但你明白了。如果我在模板中打印{{ emojis.5 }},我会看到[':*', ':-*', ':=*', '(kiss)']。这个结果本身就是一个列表,因为可以通过所有这些符号制作亲吻表情符号。

总而言之,在这 52 个子列表中,我希望有 10 个 random 出现在我的模板中。此外,我只想打印每个随机选择的子列表中的第一项

这是我实际尝试的:

{% for index in random %}
{{ emojis.index.0 }}
{% endfor %}

什么都没有出现。在我的脑海中,我认为这会通过emojis.index 获得10 个随机子列表,而.0 将确保它只返回第一项。

【问题讨论】:

  • 伙计们,如果我错过了什么,请向我询问更多信息

标签: python django django-templates django-views


【解决方案1】:

This 是为什么这不起作用。 TLDR:动态索引在 Django 中不起作用。可以{{ foo.5 }},但不能{{ foo.{{bar}} }}

然而,在传递它之前,在你的上下文中构建你的随机列表(假设emojis 是一个包含你所有表情符号的变量):

random_indexes = random.sample(xrange(1,52),10) context["random_emojis"] = [emojis[ind] for ind in random_indexes]

然后在您的模板中:

{% for emoji in random_emojis %} {{ emoji.0 }} {% endfor %}

【讨论】:

  • 所以这样做对我来说直接不可能,因为我正在使用为我预先定义模板标签的插件 (github.com/Fantomas42/django-emoticons)。但是我标记/赞成它,因为在正常传输下,这正是人们会这样做的方式。
猜你喜欢
  • 2016-06-08
  • 2016-03-14
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2015-02-20
  • 2017-03-23
  • 1970-01-01
  • 2016-04-28
相关资源
最近更新 更多