Ich habe 2 Abfragesätze: Post und Kommentar. Ich benutze Django-el-Paginierung um diese mit ajax zu rendern.
Hier ist meine Ansicht:
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)
Ich habe einen Ajax-Aufruf, der herausfindet, welcher Abfragesatz verwendet wird. Wenn also auf „Mehr Kommentare“ oder „Mehr Posts“ (in der Vorlage) geklickt wird, um mehr paginierte Objekte zu erhalten, weiß ich, aus welchem Abfragesatz es stammt. Wenn ich jedoch den obigen Code verwende und für die Ajax-Paginierung auf „Mehr“ klicke, wird die gesamte Seite angehängt, nicht die relevante untergeordnete Vorlage (user_posts.html
oder user_comments.html)
. Aber die if request.is_ajax()
Codeblock funktioniert gut; Es druckt die richtige zu verwendende Vorlage, sodass dies nicht passieren sollte.
Wenn ich diesen Codeblock in diesen ändere
if request.is_ajax():
page_template="user_posts.html"
Die Ajax-Paginierung für Post
funktioniert. Ich möchte jedoch Ajax-Paginierung für hinzufügen Comment
auch. Warum nicht meine Initiale if request.is_ajax()
funktioniert und wie kann ich das beheben?
BEARBEITEN:
Ausgabe, wenn ich auf klicke 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
}
})
});
profil.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 (untergeordnete Vorlage)
{% 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="https://stackoverflow.com/questions/44731075/{% 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' '...' %}