jinja2 - цикл по словарю

Если вы хотите преобразовать большое число с большим количеством символов, возможно, этот алго мог бы помочь.

Единственная предпосылка для символов - это то, что должно быть нечетным и следовать одному правилу (1, 5, 10, 50,100 ...., 10 ^ (N) / 2, 10 ^ (N)).

var rnumbers = ["I","V","X","L","C","D","M"];
        rnumbers = rnumbers.concat(["V","X","L","C","D","M"].map(function(n) {return '<span style="border-top:1px solid black; padding:1px;">'+n+'</span> '}));
        rnumbers = rnumbers.concat(["V","X","L","C","D","M"].map(function(n) {return '<span style="border:1px solid black; border-bottom:1px none black; padding:1px;">'+n+'</span> '}));
        rnumbers = rnumbers.concat(["V","X","L","C","D","M"].map(function(n) {return '<span style="border-top:3px double black; padding:1px;">'+n+'</span> '}));


    String.prototype.repeat = function( num ) {
        return new Array( num + 1 ).join( this );
    };

    function toRoman(n) {

        if(!n) return "";

        var strn = new String(n);
        var strnlength = strn.length;
        var ret = "";
        for(var i = 0 ; i < strnlength; i++) {
            var index = strnlength*2 -2 - i*2;
            var str;
            var m = +strn[i];
            if(index > rnumbers.length -1) {
                str = rnumbers[rnumbers.length-1].repeat(m*Math.pow(10,Math.ceil((index-rnumbers.length)/2)));
            }else {
                str = rnumbers[index].repeat(m);
                if (rnumbers.length >= index + 2) {
                    var rnregexp = rnumbers[index]
                            .split("(").join('\\(')
                            .split(")").join('\\)');
                    
                    str = str.replace(new RegExp('(' + rnregexp + '){9}'), rnumbers[index] + rnumbers[index + 2])
                            .replace(new RegExp('(' + rnregexp + '){5}'), rnumbers[index + 1])
                            .replace(new RegExp('(' + rnregexp + '){4}'), rnumbers[index] + rnumbers[index + 1])
                }
            }
            ret +=str;
        }

        return ret;
    }
    
<input type="text" value="" onkeyup="document.getElementById('result').innerHTML = toRoman(this.value)"/>

<br/><br/>

<div id="result"></div>

0
задан faruk13 4 March 2019 в 08:37
поделиться

1 ответ

Можно использовать фильтр dict2items . Шаблон ниже

{% for item in test123|dict2items %}                                                
{{ item }}                                                                          
{% endfor %}

{% for item in test123|dict2items %}
key: {{ item.key }}
value.number: {{ item.value.number }}
value.name: {{ item.value.name }}
value.path: {{ item.value.path }}

{% endfor %}

дает

{'value': {u'path': u'/tmp/test.txt', u'name': u'test1', u'number': 1}, 'key': u'testA'}
{'value': {u'path': u'/tmp/test.txt', u'name': u'test2', u'number': 2}, 'key': u'testB'}

key: testA
value.number: 1
value.name: test1
value.path: /tmp/test.txt

key: testB
value.number: 2
value.name: test2
value.path: /tmp/test.txt
0
ответ дан Vladimir Botka 4 March 2019 в 08:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: