2012-06-02 79 views
5

有什麼方法可以在django模板中有一個隨機字符串?模板中的隨機字符串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 %} 

編輯: 謝謝你的答案,但我的情況下,需要更具體的東西,因爲它是在基本模板(至極我忘了說抱歉) 。所以爬行谷歌和一些文檔後,我落在背景處理器文章至極做的工作,我發現它有點「heavey」反正只是用於生成隨機數...

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

模板標籤沒有技巧(或我沒有找到如何),因爲它返回一個無法翻譯的標籤,我記得(參見blocktrans doc)

我沒有找到一種方法來生成一個基數查看(有沒有?),如果有一種方法比上下文過程更好,我會很高興有一些信息。

回答

2

我想你想有一個標籤,從一些包含字符串的表中生成隨機字符串。看到這個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) 
0

你應該編寫一個自定義模板標籤,看看這個(具有封閉功能)爲例:http://djangosnippets.org/snippets/150/,但如果它不是關鍵的話,對於模板中的行數組,我寧願將這個隨機字符串在視圖中生成。

17

而不是使用if-else塊,傳遞字符串列表到您的模板,並使用random過濾器似乎更

在你看來:

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

並在您的模板中:

{{ my_strings|random }} 

Here is the doc

+1

兩者還可以添加這context_processors並將它全局可用。好的提示 – zzart

+0

目前爲止的最佳解決方案 – codingrhythm

13

你可以做這樣的事情:

{# 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/

+0

我想這隻受unicode中字母數量的限制,但'with'語句真的會很快變得非常奇怪。這是值得的,但我們可以擁有'{%elif rnd =='「%}'語句 – mlissner

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

在標記。潘岳:

@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/