3

エントリのクエリセットを返す次の django コードがあります。

def search(request):
    entries_list = Entry.objects.all()
    if request.method == 'GET':
        key = request.GET.get('key', False)
        entries_list = entries_list.filter(key__icontains=key)

    return render(request, 'search.html', {
         'entries': entries_list
    })

私がやりたいことは、テンプレートにエントリ (キーと値のペア) を出力し、それらをローカル ストレージに保存することです。これどうやってするの?JSON を返すかシリアル化しようとしましたが、成功しませんでした。

つまり、JavaScript (for ループ) コードで、数値の代わりにクエリセットの結果を挿入したいと思います。

{% extends  'base.html' %}

{% block head %}

<script>
var prefix = "localStorage-";
function myFunction() {
    alert("Page is loaded");
    for(var i = 0; i < 10; i++) {
        var key = i// $("#key").attr('value');
        var value = 2*i//$("#value").attr('value');
        localStorage.setItem(prefix + key, value);      //******* setItem()
        //localStorage[prefix+key] = value; also works
    }
}

</script>


 {% endblock %}

{% block body %} onload="myFunction()"  {% endblock %}

{% block content %}

{% for e in entries %}
    <h3>
        <a href="{% url 'article' e.id %}">{{ e.key }}</a>
    </h3>
    {{ e.value|safe }}
    <hr>
{% endfor %}

{% endblock %}
4

1 に答える 1

2

質問が正しく理解できれば、Django テンプレートで JavaScript を生成しますか?

...
function myFunction()
{
    {% for value in entries %}
        localStorage.setItem(localStorage-{{ forloop.counter0 }}, {{ value }});
    {% endfor %}
}
....

これにより、次のような結果が得られます

....
function myFunction()
{
    localStorage.setItem(localStorage-0, 'string_version_of_entry_0');
    localStorage.setItem(localStorage-1, 'string_version_of_entry_1');
    localStorage.setItem(localStorage-2, 'string_version_of_entry_2');
    ...
}
....

Entryそれぞれが文字列に変換されることに注意してください。明らかに、Django オブジェクトを JavaScript に転送することはできません。def __unicode__(self)に を追加することで、変換方法を制御できますEntry

于 2013-06-08T23:23:32.647 に答える