我有2个查询集:发布和评论。我使用django-el-pagination使用ajax渲染这些内容。
以下是我的观点:
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)
我有一个ajax调用,可以找出正在使用的查询集。所以,当更多评论'或者'更多帖子' (在模板中)被点击以获得更多的分页对象,我知道它来自哪个查询集。
但是,当我使用上面的代码并点击“更多”时,对于ajax分页,它会附加整个页面,而不是相关的子模板(user_posts.html
或user_comments.html)
。但if request.is_ajax()
代码块工作正常;它打印正确的模板以便使用不应该发生。
当我将该代码块更改为此
时if request.is_ajax():
page_template = 'user_posts.html'
Post
的ajax分页有效。但是,我还要为Comment
添加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' '...' %}
答案 0 :(得分:9)
下线的输出是什么?
print('Queryset:', user_queryset)
我认为你在下面的行有问题
user_queryset = request.GET.get('user_queryset')
这不会返回正确的get参数值,以匹配发布和评论部分的条件。
答案 1 :(得分:1)
您可以查看附近的javascript:
user_queryset = 'user_comments';
尝试将其更改为:
var user_queryset = 'user_comments';
我假设,如果你直接发表评论,那么变量user_queryset将是未定义的,并且它不会作为'user_comments'传递。