2017-06-23 9 views
26

投稿とコメントの2つのクエリセットがあります。私はdjango-el-paginationを使ってこれらをajaxを使ってレンダリングしています。私が使用されているクエリセットを見つけるAJAX呼び出しを持っている複数のページ番号(ajax)がdjango-el-paginationで機能しない

def profile(request, user, extra_context=None): 

    profile = Profile.objects.get(user__username=user) 

    page_template = 'profile.html' 

    if request.is_ajax(): 
     user_queryset = request.GET.get('user_queryset') 
     print('Queryset:', user_queryset) 
     if user_queryset == 'user_posts': 
      page_template = 'user_posts.html' 
     elif user_queryset == 'user_comments': 
      page_template = 'user_comments.html' 
     else: 
      pass 

    print('Template:', page_template) 

    user_posts = Post.objects.filter(user=profile.user).order_by('-date') 
    user_comments = Comment.objects.filter(user=profile.user).order_by('-timestamp') 

    context = {'user_posts': user_posts,'user_comments': user_comments, 'page_template': page_template} 

    if extra_context is not None: 
     context.update(extra_context) 

    return render(request, page_template, context) 

は、ここに私の見解です。したがって、より多くのページ付けされたオブジェクトを取得するために「more comments」または「more posts」(テンプレート内)がクリックされているとき、どのクエリーセットから来たのかわかります。 しかし、私は上記のコードを使用し、ajaxページネーションの 'more'をクリックすると、関連する子テンプレート(user_posts.htmlまたはuser_comments.html)ではなくページ全体が追加されますが、if request.is_ajax()コードブロックは正常に動作します。これは、しかし、私はComment aswellのためのAjaxのページ付けを追加したいと思います。

私はこの

if request.is_ajax(): 
    page_template = 'user_posts.html' 

Post作品のためのAjaxのページ付けをそのコードブロックを変更します。起こっすべきではない。なぜありません私の最初のif request.is_ajax()作業とそれを修正するにはどうすればいいですか?

編集:私はmore posts上でクリックしたときの

出力:

Queryset: None 
Template: profile.html 
Queryset: user_posts 
Template: user_posts.html 

JS

$('body').on('click', '.endless_more', function() { 
    console.log($(this).html()); #works successfully 
    var user_queryset; 
    if ($(this).html() === 'more posts') { 
     console.log('POSTS'); #works successfully 
     var user_queryset = 'user_posts' 
    } else if ($(this).html() === 'more user comments') { 
     user_queryset = 'user_comments'; 
     console.log('COMMENTS'); #works successfully 
    } else { 
     console.log('none'); 
    } 
    $.ajax({ 
     type: 'GET', 
     url: window.location.href, 
     data: { 
      'user_queryset': user_queryset 
     } 

    }) 
}); 

profile.html

<!--posts--> 
<div class="user_posts_div"> 
    <div class="endless_page_template"> 
     {% include "user_posts.html" %} 
    </div> 
</div> 

<!--comments--> 
<div class="user_comments_div"> 
    <div class="endless_page_template"> 
     {% include "user_comments.html" %} 
    </div> 
</div> 

user_posts.html(子テンプレート)

{% paginate 5 user_posts %} 
    {% for post in user_posts %} 
     <div class="user_post"> 
      <p class="user_post_title_p"><a class="user_post_title" href="{% url 'article' category=post.entered_category id=post.id %}">{{ post.title }}</a></p> 
      <p class="user_post_category">/{{ post.entered_category }}</p> 
      <p class="user_post_date">{{ post.date|timesince }}</p> 
     </div> 

    {% endfor %} 
{% show_more 'more posts' '...' %} 

答えて

10

下のラインの出力は何ですか?

print('Queryset:', user_queryset) 

は、私はあなたが下の行、これはポストとコメント部分の条件と一致するための正しいGETパラメータの値を返すされていない

user_queryset = request.GET.get('user_queryset') 

に問題があると思います。変更してみ

user_queryset = 'user_comments'; 

+0

はい、そうです、それは間違いありません。何らかの理由で、親テンプレート( 'profile.html')を最初に印刷したときに間違って2回印刷されます。それは、子テンプレート( 'user_posts.html')のみを出力すべきです。なぜこれを行うのでしょうか?私は私の編集で出力を追加しました。 – Zorgan

+0

呼び出しが2回あるということは、このビューを呼び出すためにjsに何か間違っていることを意味します。 is_ajax()メソッドの前にpage_ template = 'profile.html'を定義しました。あなたがuser_querysetでNoneを取得したときにprint.htmlテンプレートが出力されるようにしました。 –

+0

編集にjsコードを追加しました。それに何か悪いことはないようです。クリックした内容に応じて正しい単語が記録されます。何か案が? – Zorgan

1

お近くのあなたのJavaScriptでチェックすることができますが、コメントに直接行けば

var user_queryset = 'user_comments'; 

私は、変数user_querysetが未定義になることを、前提としそれは 'user_comments'として渡されません。

+0

ええ、私はそれを試して、anyhingを修正していません。私は自分のJSを編集したところで、前に 'user_queryset'変数が宣言されているので、未定義ではありません。 JSは正しいデータを送信し、問題はビューにあるようです。 – Zorgan

関連する問題