0
votes

I'm creating a Django site that hosts a large set of long, transcribed debates.

I have two main views: a Haystack search view which indexes each individual speech, and a full view which indexes each transcript (containing hundreds of individual speeches). Both views use django endless pagination to display results.

I'm trying to link between these two views so that any search result (speech) can be viewed in context within its parent transcript, and I want the page to jump to the anchor of that speech ID on page load.

I calculate the page where the individual result appears and redirect to that URL while storing the pk of the result in messages so I can highlight the result:

def full_view_redirect(request, year, month, day, pk):
    y=str(year)
    m=str(month)
    d=str(day)
    qs = transcripts.objects.filter(speechdate__year=year).filter(
    speechdate__month=month).filter(speechdate__day=day).order_by('basepk').all()
    firstpk = int(qs[0].basepk)

    pageNo = ((int(pk)-firstpk)//15)+1

    messages.add_message(request, messages.INFO, pk)

    if pageNo == 1:
        return redirect("/full/"+y+"/"+m+"/"+d+"/"+"#"+str(pk))
    else: ## this doesn't work
        return redirect("/full/"+y+"/"+m+"/"+d+"/"+"?page="+str(pageNo)+"#"+str(pk))

My question is similar to http://htmlasks.com/how_to_make_this_link_work_page2reviews_reload_the_page_and_jump_to_the_anchor but the suggestion here to switch around the anchor and the ?page doesn't work.

I can't get the anchor to work so the page jumps to the desired result on page load. Am I missing something obvious?

Edit: I verified the div I want to jump to has a proper id, eg.

<div class="panel panelhighlight" id="54969">

A url like /full/1903/04/29/?page=7#54969 loads the proper page but does not jump to the div. A url like /full/1903/04/29/#54969?page=7 loads the first page and not page 7.

Edit 2:

I have switched from django-endless-pagination to django-digg-paginator so that pagination is handled within my view, not at the template level.

Then, I had to ensure the redirect reloads by omitting the slash between the page number and the anchor. /full/1903/04/29/7#54969 repositions the page successfully on load.

1
What exactly doesn't work, do you have an anchor on the page with your pk so the browser knows where to jump? <a name="{{ pk }}"></a>serg
Yes, here's the code for the div I want to jump to: {% if result.basepk|stringformat:"s" == refer_pk|stringformat:"s" %} <div class="uk-panel uk-panel-box panelhighlight" id ='{{ refer_pk|stringformat:"s" }}'> I also had the id anchors working just fine before I implemented pagination for the full view results.twhyte

1 Answers

0
votes

As detailed in my edit, I had two problems going on that I needed to fix:

  1. I switched from django-endless-pagination to django-digg-paginator so that pagination is handled within my view/URL pattern, not at the template level.

  2. I had to ensure the redirect reloads by omitting the slash between the page number and the anchor, ie. /full/1903/04/29/7#54969 repositions the page successfully on load.