jquery - bootstrap - La paginación múltiple(ajax) no funciona para django-el-pagination
paginate query set django (2)
¿Cuál es la salida de la línea inferior?
print(''Queryset:'', user_queryset)
Creo que tienes un problema en la línea inferior.
user_queryset = request.GET.get(''user_queryset'')
esto no está devolviendo el valor correcto de obtener el parámetro para que coincida con la condición de publicación y comentario.
Tengo 2 consultas: Publicar y comentar. Estoy usando django-el-pagination para renderizarlos usando ajax.
Aquí está mi opinión:
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)
Tengo una llamada ajax que averigua qué conjunto de consultas se está utilizando. Entonces, cuando se hace clic en ''más comentarios'' o ''más publicaciones'' (en la plantilla) para obtener más objetos paginados, sé de qué queryset se trata. Sin embargo, cuando uso el código anterior y hago clic en "más" para la paginación ajax, agrega toda la página, no la plantilla secundaria relevante ( user_posts.html
o user_comments.html)
. Pero el bloque de código if request.is_ajax()
funciona bien; Imprime la plantilla correcta para usar, por lo que esto no debería estar sucediendo.
Cuando cambio ese bloque de código a este
if request.is_ajax():
page_template = ''user_posts.html''
La paginación ajax para trabajos de Post
. Sin embargo, me gustaría añadir la paginación ajax para el Comment
también. ¿Por qué no funciona mi inicial if request.is_ajax()
y cómo puedo solucionarlo?
EDITAR:
Salida de cuando hago clic en 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 (plantilla secundaria)
{% 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'' ''...'' %}
Podrías revisar tu javascript cerca de:
user_queryset = ''user_comments'';
Intenta cambiarlo a:
var user_queryset = ''user_comments'';
Supongo que, si vas directamente a los comentarios, la variable user_queryset no estará definida y no se pasará como ''user_comments''.