как создать именованные якоря в Django для перехода к определенным частям страницы - PullRequest
1 голос
/ 31 января 2010

Я создаю сайт "Q & A". На странице вопросов можно увидеть все ответы (с нумерацией страниц). Мне нужно перейти прямо к ответам (на странице) с других страниц. Я пытался реализовать именованные якоря, но не смог перейти к разделу страницы.

get_absolute_url () ответчика возвращает URL в форме:

www.example.com/question-id/question-slug?page=no#aID <!-- EDITED -->

Пример URL:

www.example.com/question-10/what-is-this?page=2#a20   <!-- EDITED -->

и в html:

    {% autopaginate answers 10 %}
    {% for answer in answers %}
      <div>
        <a name="a{{answer.id}}">Answer</a> <!-- EDITED -->
        {# answer body goes here#}
      </div>
    {% endfor %}
    {% paginate %}

Перенаправляет на правильную страницу, но не на правильный раздел страницы.

РЕДАКТИРОВАТЬ : Result! When clicked, After going to the page section, it bounces to the bottom of the page

Ответы [ 3 ]

7 голосов
/ 31 января 2010

Удивительно малоизвестный факт: якоря могут перейти к любому элементу с идентификатором на странице;это не должно быть якорным элементом.Таким образом, вы можете просто поставить идентификатор на div:

<div id="a_{{answer.id}}">
    <span>Answer</span>
    {# answer body goes here#}
</div>

(очевидно, используйте любой элемент, который имеет смысл в заголовке ответа; span выше только для иллюстрации.)

Насколько я знаю, нет ничего плохого в использовании якорей (хотя якоря с контентом, как правило, демонстрируют поведение, подобное ссылкам - ролловеры и тому подобное - если вы не осторожны с вашим CSS), но просто как вариант,у вас есть и другая альтернатива.

3 голосов
/ 31 января 2010
http://www.example.com/question-10/what-is-this#a_20/?page=2
<a id="a_{{answer.id}}">Answer</a>

В идентификаторе фрагмента нет механизма частей пути (/) или строк запроса (?).

Предполагается ли отправлять параметр пагинации на сервер? Если это так, это легко исправить:

http://www.example.com/question-10/what-is-this?page=2#a_20

Если нет; если вы выполняете разбиение на страницы на стороне клиента, поэтому запрос был добавлен как часть идентификатора фрагмента, у вас возникли проблемы.

Вы не можете ссылаться на часть документа и включают дополнительные параметры для разбивки на страницы на стороне клиента: вы можете иметь идентификатор фрагмента, который указывает на реально идентифицированный элемент на странице, или Идентификатор фрагмента, используемый в качестве хака для передачи параметров в скрипт, но вы не можете использовать оба сразу. Фрагмент, который вы указали, представляет собой одну длинную строку и может быть сопоставлен только с помощью:

<a name="a_20/?page=2">foo</a>

(здесь я использовал старомодный атрибут name вместо обычно предпочитаемого атрибута id, потому что это:

<div id="a_20/?page=2">foo</div>

недействительно. id атрибуты не могут включать произвольные знаки препинания; это токены NAME , которые могут быть только буквенно-цифровыми, _, ., - и : (хотя последний не рекомендуется). Если вы хотите указать другие типы символов, они должны быть закодированы каким-либо специфическим для приложения способом.)

1 голос
/ 31 января 2010
a_{{answer.is}}

может быть, у вас опечатка?

a_{{answer.id}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...