投稿とコメントの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' '...' %}
はい、そうです、それは間違いありません。何らかの理由で、親テンプレート( 'profile.html')を最初に印刷したときに間違って2回印刷されます。それは、子テンプレート( 'user_posts.html')のみを出力すべきです。なぜこれを行うのでしょうか?私は私の編集で出力を追加しました。 – Zorgan
呼び出しが2回あるということは、このビューを呼び出すためにjsに何か間違っていることを意味します。 is_ajax()メソッドの前にpage_ template = 'profile.html'を定義しました。あなたがuser_querysetでNoneを取得したときにprint.htmlテンプレートが出力されるようにしました。 –
編集にjsコードを追加しました。それに何か悪いことはないようです。クリックした内容に応じて正しい単語が記録されます。何か案が? – Zorgan