1

ページの記事のリストがテーブルにあり、ボタンをクリックしてajaxでソートしたい。

私はdajaxiceを使用しています。リクエストをajax.pyからexample1メソッドに送信し、 my_js_callbackでresponce JSONデータを取得します

HTML:

<script>
function my_js_callback(data) {
    alert(data)
    $("#article_view_tbody").html("")
    for (i=0;i<data.length;i++)
         article=data[i]
     $("#article_view_tbody").append("<tr><td>" + data[i].title...) // here i need to set url for article edit
}
</script>
<button type="button" onclick="Dajaxice.content.example1(my_js_callback);">Click Me!</button>
<table>
<tbody id="article_view_tbody">
    {% for article in articles %}
        <tr>
            <a class="article_link" href="{% url article_detail article.id %}">
                    {{ article.title }}
        </a>
            </td>
         </tr> ...

ajax.py:

from django.utils import simplejson
from django.core import serializers
from dajaxice.decorators import dajaxice_register
from models import Article

def get_by_date_queryset():
      return Article.objects.all().order_by('created_on')

@dajaxice_register    
def example1(request):
    """ Handling sorting requests """
    queryset = get_by_date_queryset()
    json_serializer = serializers.get_serializer("json")()
    return json_serializer.serialize(queryset, ensure_ascii=False)

JS で {% url %} タグを渡すことができません。SOは、jsデータを追加せずにajaxでtbodyをリロードする方法ですか?

4

1 に答える 1

2

単純にクエリセットをシリアル化して返す代わりに、次の形式で各要素を含むリストを返すことができます。

    return [
        {
            'pk': article.pk,
            'title': article.title,
            'url': reverse('view_article', args=(article.pk,))  # Or, use article.get_absolute_url()
        }
    for article in queryset]

JavaScript を使用articles[i].urlして、返された JSON を単純にループし、ループ内で使用しfor(var i = 0;...て URL、タイトルなどを取得できます。

更新(re:「ハードコードの悪い方法」):

単純に使用します:

serialized = json_serializer.serialize(queryset, ensure_ascii=False)
loaded = json.loads(serialized)
for row in loaded:
    row['url'] = reverse('view_article', args=(row['pk'],))
return json.dumps(loaded)

"fields"これは、 をから分離するのにも役立ちます"url"(より正確に感じます)。

于 2012-06-18T13:57:39.287 に答える