2017-02-08 10 views
0

を変更するにはAJAX呼び出しを実行するとき、私はこのようになりますcomments.html子テンプレート持つ私の子テンプレートでの作業を停止するjavascriptのすべて:私はこのAJAX機能を呼び出すボタンをクリックすると私はクエリセット

<div class="commentsContainer"> 
    {% for comment in comment_list %} 

    ... 


     {{ comment.text }} 

    ... 

    {% endfor %} 

</div> 

を:

クエリセットを変更するには、このビューを呼び出す
$('.comments_new').on('click', function() { 
    $.ajax({ 
     type: 'GET', 
     url: '/new_comments/', 
     data: { 
     }, 
     success: function (data) { 
      $('.commentsContainer ').replaceWith(data); 
     } 
    }) 
}); 

(initalクエリセットはcomment_list = Comment.objects.filter().order_by('-score__upvotes')です:

def new_comments(request): 
    if request.is_ajax(): 
     comment_list = Comment.objects.filter().order_by('-timestamp') 
     html = render_to_string('comments.html', {'comment_list': comment_list}) 
     return HttpResponse(html) 

これはクエリーセットを正常に交換しますが、何らかの理由で新しくロードされたテンプレート/クエリーセットではJavaScriptが機能しません。私は単純な.css() jquery関数を使ってみましたが、どちらもうまくいきません。定期的なCSSのみが動作します。なぜこのようなことが起こり、どうやって修正できるのか、誰かに教えてもらえますか?

EDIT:呼び出しが行われたとき

私はまた私の端末でこのエラーを取得しています:UserWarning: A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext.

EDIT2:新しいコールJsonResponse

def new_comments(request): 
    if request.is_ajax(): 
     comment_list = Comment.objects.filter().order_by('-timestamp') 
     html = {'comment_list': comment_list} 
     return JsonResponse(html) 

raise TypeError(repr(o) + " is not JSON serializable")

TypeError: <QuerySet [<Comment: qwdjkqbwkdjbqd>, <Comment: woeifnoeinfw>, <Comment: example>, <Comment: enlaasd>, <Comment: aelanfaf>, <Comment: asdasda>]> is not JSON serializableを使用して

+0

あなたの応答はhtmlですか? –

+0

はい? 'comments.html'は' base.js' javascriptファイルを持つ基本テンプレートを拡張します。 – Zorgan

+0

ではなく、レスポンスf ajax url: '/ new_comments /'はhtmlコンテンツですか? –

答えて

0

いくつかのアイデア:

  1. 私はJsonResponseであなたのHttpResponseを変更します。問題ではありませんが、誰が知っているのですか(私はあなたにこれについてのフィードバックを待っています)。新しいHTMLを値として持つキーでdictを返すことを忘れないでください。
  2. replaceWith()html()に交換する必要があります。新しいHTMLを設定しているので、予期しない動作を防ぐのがより簡単になります。
+0

' JsonResponse'を試してみましたが、 'raise TypeError(repr(o)+"はJSONのシリアライズ可能ではありません) ")'コードは私の編集にあります。 – Zorgan

+0

ええ、あなたは自動シリアル化をしようとしており、Djangoはそれをしません。あなたはquerysetの結果をdictに渡しただけです(私が言うことを見るために 'TypeError(html [" comment_list "])を呼び出す)。あなたは次のようなことをする必要があります: 'comment_list:obj in comment_list:html [" comment_list "] append({" id ":obj.id、" text ":obj.text、...})' – RompePC

+0

それは何をしていますか?私はあなたのコードを書いていますが、目標が何であるか正確にはわかりません。 '{id ':comment.id、' text ':comment.comment_text、' user '} {html = {' comment_list ':comment_list}' 'コメントのコメントのために ' ' :comment.user}) ' return JsonResponse(html) – Zorgan

関連する問題