7

有没有办法在 Django 模板中使用随机字符串?

我希望随机显示多个​​字符串,例如:

{% here generate random number rnd ?%}

{% if rnd == 1 %}
  {% trans "hello my name is john" %}
{% endif %}

{% if rnd == 2 %}
  {% trans "hello my name is bill" %}
{% endif %}

编辑:
感谢您的回答,但我的案例需要一些更具体的内容,因为它在基本模板中(我忘了提及抱歉)。因此,在爬取了谷歌和一些文档之后,我发现了完成这项工作的上下文处理器文章,我发现它有点“沉重”,只是为了生成一个随机数......

这是博客页面:http ://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/

模板标签没有诀窍(或者我没有找到方法),因为它返回了一个我记得无法翻译的标签(参见 blocktrans doc)

我没有找到为基本视图生成数字的方法(有吗?),如果有比上下文过程更好的方法,我会很高兴获得一些信息。

4

6 回答 6

21

而不是使用if-else块,将字符串列表传递给您的模板并使用random过滤器似乎更好

在您看来:

my_strings = ['string1', 'string2', ...]
...
return render_to_response('some.html', {'my_strings':my_strings})

在您的模板中:

{{ my_strings|random }}

这是文档

于 2012-06-02T09:27:04.453 回答
14

你可以这样做:

{# set either "1" or "2" to rnd, "12"|make_list outputs the list [u"1", u"2"] #}
{# and random chooses one item randomly out of this list #}

{% with rnd="12"|make_list|random %}
    {% if rnd == "1" %}
        {% trans "hello my name is john" %}
    {% elif rnd == "2" %}
        {% trans "hello my name is bill" %}
    {% endif %}
{% endwith %}

查看“内置模板标签和过滤器”文档了解更多信息: https ://docs.djangoproject.com/en/1.4/ref/templates/builtins/

于 2012-06-07T19:51:55.183 回答
4

我猜你想要一个标签,从一些包含字符串的表中生成随机字符串。请参阅此 Django 片段:

http://djangosnippets.org/snippets/286/

# model
class Quote(models.Model):
  quote = models.TextField(help_text="Enter the quote")
  by = models.CharField(maxlength=30, help_text="Enter the quote author")
  slug = models.SlugField(prepopulate_from=("by", "quote"), maxlength=25)
  def __str__(self):
    return (self.quote)

# template tag
from django import template
register = template.Library()
from website.quotes.models import Quote

@register.simple_tag
def random_quote():
  """
  Returns a random quote
  """
  quote = Quote.objects.order_by('?')[0]

  return str(quote)
于 2012-06-02T09:17:35.363 回答
0

您应该编写一个自定义模板标签,以这个(具有关闭功能)为例:http ://djangosnippets.org/snippets/150/ ,但如果它不是关键的,对于模板中的行数组,我会而是在视图中生成这个随机字符串。

于 2012-06-02T09:13:49.490 回答
0

如果您想包含随机模板并使其全局可用:

在 context_processors 中:

def sample(request):
  my_strings = ['string1', 'string2', ...]
  return {banners: my_stirngs}

在 tempale 中(假设您的包含在 'inc' 文件夹中):

  {% with banners|random as template %}
    {% include 'inc/'|add:template %}
  {% endwith %}  
于 2013-03-13T11:28:14.603 回答
0

在模板中:

{% random_number as rnd %}
The best 6 digits (by default) random number is: {{ rnd }}

{% random_number 9 as rnd9 %}
The best 9 digit random number is: {{ rnd9 }}

在 markup.py 中:

@register.assignment_tag()
def random_number(length=6):
    from random import randint
    return randint(10**(length-1), (10**(length)-1))

取自https://djangosnippets.org/snippets/2984/

于 2015-08-30T19:08:08.697 回答