Dlaczego plik HTML przekonwertowany z pierwszego pliku zawierającego znak zapytania nie może zostać wyświetlony w przeglądarce, kiedy należy kliknąć katalog?

14

Pobierz plik simple.7zi zainstaluj w swoim sfinksie, aby odtworzyć problemy, które tu opisałem, aby je odtworzyć, możesz uruchomić:

make clean
make html   

pobierz i zainstaluj w swoim sfinksie, aby odtworzyć problemy

Są dwa artykuły sample/source, treść jest taka sama, jedyną różnicą jest tytuł.

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

Jeden zawiera ?, a drugi nie ?. Dziwna rzecz wydarzyła się po uruchomieniu 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

zobacz kafelek po uruchomieniu <code> make html </code> Problem 1:
Dlaczego firefox pokazuje to wszystko jako What does “_” in Python mean in a for-loop? Uwaga: "_"został połączony “_”;
Tytuł, który nie zawiera ?takiego, w jakim What does "_" in Python mean in a for-loop.htmlzostał wkompilowany What does “_” in Python mean in a for-loop?, który dodaje ??

Problem 2: Aby kliknąć pierwszy tytuł What does “_” in Python mean in a for-loop?, przeglądarka przechodzi do stanuno url was not found on this server

na tym serwerze nie znaleziono adresu URL, kiedy należy kliknąć pierwszy tytuł Aby kliknąć drugi tytuł What does “_” in Python mean in a for-loop?, działa dobrze. działa dobrze, kiedy kliknąć drugi tytuł

Proszę wyjaśnić mój problem.

złomować
źródło
1
Pokaż swój tekst reStructuredText, z którego Sphinx wygenerował ten kod HTML.
Steve Piercy,
print(“Hello”)??? Musisz wyłączyć „inteligentne” cytaty.
kthy

Odpowiedzi:

6

Problem 1 tak naprawdę nie jest problemem, jest to normalne zachowanie Sphinx: wyświetlany tytuł nie jest nazwą pliku, ale tytułem najwyższego poziomu dokumentu ResT, który w obu przypadkach kończy się znakiem zapytania. Zobacz spis treści > .. toctree :: > Wpisy na tej stronie, który stwierdza:

Tytuły dokumentów w drzewie plików zostaną automatycznie odczytane z tytułu dokumentu, do którego się odwołuje.

Jeśli chcesz się przekonać, po prostu zmień tytuł dowolnego dokumentu, przebuduj HTML i zobacz.


Problem 2 jest spowodowany obecnością nieoznaczonego znaku zapytania w hreflinku. W adresie URL znak zapytania oznacza początek ciągu zapytania .

To próbuje uzyskać dostęp What does "_" in Python mean in a for-loop?.html, czyli poprosić o What does "_" in Python mean in a for-loopdokument HTML, podając mu .htmlparametr. I oczywiście żądany dokument nie został znaleziony, ponieważ nie istnieje.

W pasku adresu przeglądarki możesz zastąpić znak zapytania jego urlencodowaną postacią %3Fi obserwować, jak działa.

Nie znalazłem żadnego sposobu, aby sfinks automatycznie urlencode nazwy dokumentów w linkach href(w rzeczywistości jest to uważane za błąd ) ani w żadnym dokumencie wyraźnie wyrażającym ograniczenia nazewnictwa dla dokumentów ResT.

Ale wiem z doświadczenia, że nazywanie pliku interpunkcją jest często źródłem problemów . Radziłbym, abyś zmienił nazwę dokumentu na mniej egzotyczne znaki (slugify). Nazwanie dokumentu ResT underscore_in_for_loop.rstzamiast What does "_" in Python mean in a for-loop?.rstzaoszczędzi ci dużo czasu i problemów.

I pamiętaj, że nie powinno to stanowić problemu, ponieważ, jak widzieliśmy w pierwszym numerze, nazwa dokumentu jest używana tylko dla adresu URL.

Tryph
źródło
4

?jest symbolem wieloznacznym dla dopasowania słów częściowych w adresie URL i dlatego będzie traktowany jako znak specjalny.

Dzikie karty działają z dwoma typami jokerów:

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

W tym celu musisz zakodować adres URL

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

W Pythonie 3.x musisz zaimportować plik urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)
Sreeram Nair
źródło
2
wildcard działa z 2 żartownicami
Sreeram Nair,
Myślę, że ?jest traktowany jako symbol wieloznaczny i dlatego nie jest konwertowany %3fna adres URL.
Sreeram Nair
5
Jest to więc błąd dla python-sfinksa.
złomowanie
jaki jest związek między połączonym dokumentem adroll a sfinksem ...?
Tryph