Почему html-файл, преобразованный из первого файла, содержащего вопросительный знак, не может отображаться в браузере при нажатии на каталог?


14

Пожалуйста, скачайте файл simple.7zи установите его в свой sphinx, чтобы воспроизвести проблемы, которые я описал здесь, чтобы воспроизвести его, вы можете запустить:

make clean
make html   

загрузите и установите в своем сфинксе, чтобы воспроизвести проблемы

Есть две статьи sample/source, содержание одинаковое, только разница в названии.

cd  sample
ls source |grep  "for-loop"
What does "_" in Python mean in a for-loop.rst
What does "_" in Python mean in a for-loop?.rst

Один содержит ?в себе, другой не содержит ?. Странная вещь случилась после бега make html.

make html
ls build/html|grep  "for-loop"
What does "_" in Python mean in a for-loop.html
What does "_" in Python mean in a for-loop?.html

пожалуйста, смотрите плитку после запуска <code> make html </ code> Выпуск 1:
Почему светлячок показать все то , как What does “_” in Python mean in a for-loop? Примечание: "_"был combiled в “_”;
Заголовок, который не содержит ?такого, как What does "_" in Python mean in a for-loop.htmlбыл скомпилирован What does “_” in Python mean in a for-loop?, который добавляет ?в него?

Проблема 2. Чтобы щелкнуть первый заголовок What does “_” in Python mean in a for-loop?, браузер перейдет в состояниеno url was not found on this server

на этом сервере не было найдено ни одного URL, когда щелкнуть первый заголовок Чтобы нажать на второй заголовок What does “_” in Python mean in a for-loop?, он отлично работает. отлично работает, когда нажать на второй заголовок

Пожалуйста, дайте объяснение по моей проблеме.


1
Пожалуйста, покажите свой reStructuredText, из которого Сфинкс сгенерировал этот HTML.
Стив Пирси

print(“Hello”)??? Вам нужно отключить «умные» цитаты.
kthy

Ответы:


6

Проблема 1 на самом деле не является проблемой, это нормальное поведение Sphinx: отображаемый заголовок - это не имя файла, а заголовок верхнего уровня документа ResT, который заканчивается знаком вопроса в обоих случаях. Смотрите оглавление > .. toctree :: > Раздел записей этой страницы, который гласит:

Названия документов в toctree будут автоматически считываться из заголовка ссылочного документа.

Если вам нужно убедиться, просто измените заголовок любого документа, перестройте HTML и посмотрите.


Проблема 2 вызвана тем, что hrefв ссылке нет вопросительного знака без urlencoded . В URL знак вопроса означает начало строки запроса .

То, что пытается получить доступ What does "_" in Python mean in a for-loop?.html, означает запрос What does "_" in Python mean in a for-loopдокумента HTML, давая ему .htmlпараметр. И, очевидно, запрошенный документ не найден, так как он не существует.

В адресной строке своего браузера вы можете заменить знак вопроса на его кодированную форму в формате urlenco %3F, после чего вы увидите, что он работает.

Я не нашел способа сделать sphinx автоматически urlencode имен документов в ссылках href( это на самом деле считается ошибкой ) или в любом документе, четко выражающем ограничение именования для документов ResT.

Но я знаю по своему опыту, что присвоение файла пунктуации часто является источником проблем . Я бы посоветовал вам переименовать ваш документ с менее экзотическими символами (слагайте их). Наименование вашего документа ResT underscore_in_for_loop.rstвместо What does "_" in Python mean in a for-loop?.rstсэкономит вам много времени и головных болей.

И помните, что это не должно быть проблемой, так как, как мы видели в первом выпуске, имя документа используется только для URL.


4

?является подстановочным знаком для совпадения слова части в URL и, следовательно, будет рассматриваться как специальный символ.

джокеры работают с двумя типами джокеров:

  ? - any character  (one and only one)
  * - any characters (zero or more)

Для этого вам нужно закодировать URL

import urllib.parse
>>> urllib.parse.quote(<<url>>)

В Python 3.x вам нужно импортировать urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)

2
подстановочный знак работает с 2 джокерами
Sreeram Nair

Я думаю, что ?это рассматривается как подстановочный знак и, следовательно, его не конвертировать %3fв URL.
Срирам Наир

5
Это ошибка для python-sphinx.
скрап

Какая связь между связанными Adroll Doc и Sphinx ...?
Триф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.