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 %}

編集:
回答ありがとうございますが、私の場合はベーステンプレートにあったように、より具体的なものが必要でした(申し訳ありませんが言及するのを忘れていました)。したがって、Googleといくつかのドキュメントをクロールした後、私は仕事をしたコンテキストプロセッサの記事に落ちましたが、とにかく乱数を生成するためだけに少し「重い」ことがわかりました...

ここにブログページがあります: 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

ランダムなテンプレートを含めて、それをグローバルに利用できるようにしたい場合:

context_processors:

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

テンペール(インクルードが「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 に答える
0

カスタム テンプレート タグを作成する必要があります。例として、これ (近い機能を備えたもの) を参照してください: http://djangosnippets.org/snippets/150/が、重要でない場合は、テンプレートの行の配列に、むしろ、このランダムな文字列をビューで生成します。

于 2012-06-02T09:13:49.490 に答える