query bootstrap jquery python ajax django pagination

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''.