Warum kann die aus der ersten Datei mit Fragezeichen konvertierte HTML-Datei nicht im Browser angezeigt werden, wenn auf den Katalog geklickt werden muss?


14

Bitte laden Sie die Datei herunter simple.7zund installieren Sie sie in Ihrer Sphinx, um die hier beschriebenen Probleme zu reproduzieren. Um sie zu reproduzieren, können Sie Folgendes ausführen:

make clean
make html   

Laden Sie es herunter und installieren Sie es in Ihrer Sphinx, um Probleme zu reproduzieren

Es gibt zwei Artikel in sample/source, der Inhalt ist der gleiche, nur der Unterschied ist der Titel.

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

Einer enthält ?darin, der andere enthält nicht ?. Nach dem Laufen passierte etwas Seltsames 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

Bitte sehen Sie sich die Kachel an, nachdem Sie <code> make html </ code> ausgeführt habenProblem 1:
Warum Firefox alles dann als What does “_” in Python mean in a for-loop? Hinweis "_"anzeigt : wurde in kombiniert “_”;
Der Titel , die nicht enthalten ?, wie What does "_" in Python mean in a for-loop.htmlwurde in kompilieren What does “_” in Python mean in a for-loop?, die einen Add ?drin?

Problem 2: Um auf den ersten Titel zu klicken What does “_” in Python mean in a for-loop?, springt der Browser in einen Statusno url was not found on this server

Auf diesem Server wurde keine URL gefunden, wenn auf den ersten Titel geklickt werden soll Das Klicken auf den zweiten Titel What does “_” in Python mean in a for-loop?funktioniert einwandfrei. funktioniert gut, wenn Sie auf den zweiten Titel klicken

Bitte erläutern Sie mein Problem.


1
Bitte zeigen Sie Ihren reStructuredText, aus dem Sphinx diesen HTML-Code generiert hat.
Steve Piercy

print(“Hello”)??? Sie müssen "intelligente" Anführungszeichen deaktivieren.
kthy

Antworten:


6

Problem 1 ist eigentlich kein Problem, es ist das normale Verhalten von Sphinx: Der angezeigte Titel ist nicht der Dateiname, sondern der Titel der obersten Ebene des ResT-Dokuments, der in beiden Fällen mit einem Fragezeichen endet. Siehe den Abschnitt Inhaltsverzeichnis > .. toctree :: > Einträge auf dieser Seite, in dem Folgendes angegeben ist :

Dokumenttitel im toctree werden automatisch aus dem Titel des referenzierten Dokuments gelesen.

Wenn Sie überzeugt sein müssen, ändern Sie einfach den Titel eines Dokuments, erstellen Sie den HTML-Code neu und sehen Sie.


Problem 2 wird durch das Vorhandensein eines nicht urlencodierten Fragezeichens im hrefLink verursacht. In einer URL bedeutet das Fragezeichen den Beginn einer Abfragezeichenfolge .

Der Versuch, darauf zuzugreifen What does "_" in Python mean in a for-loop?.html, bedeutet, das What does "_" in Python mean in a for-loopHTML-Dokument anzufordern und ihm einen .htmlParameter zu geben. Und offensichtlich wird das angeforderte Dokument nicht gefunden, da es nicht existiert.

In der Adressleiste Ihres Browsers können Sie das Fragezeichen durch seine urlencodierte Form ersetzen %3F und beobachten, dass es dann funktioniert.

Ich habe keine Möglichkeit gefunden, Sphinx automatisch Urlencode-Dokumentnamen in Links zu erstellen href( dies wird tatsächlich als Fehler angesehen ) oder in einem Dokument zu erstellen, in dem die Namensbeschränkung für ResT-Dokumente klar zum Ausdruck gebracht wird.

Ich weiß jedoch aus Erfahrung, dass das Benennen einer Datei mit Interpunktion häufig zu Problemen führt . Ich würde Ihnen raten, Ihr Dokument mit weniger exotischen Zeichen umzubenennen (Slugify). Wenn Sie Ihr ResT-Dokument underscore_in_for_loop.rstanstelle von benennen What does "_" in Python mean in a for-loop?.rst, sparen Sie viel Zeit und Kopfschmerzen.

Und denken Sie daran, dass dies kein Problem sein sollte, da, wie wir in der ersten Ausgabe gesehen haben, der Dokumentname nur für die URL verwendet wird.


4

?ist ein Platzhalter für die Teilwortübereinstimmung in der URL und wird daher als Sonderzeichen behandelt.

Platzhalter funktionieren mit zwei Arten von Jokern:

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

Dazu müssen Sie die URL verschlüsseln

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

In Python 3.x müssen Sie urllib.parse.quote importieren:

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

2
Wildcard arbeitet mit 2 Jokern
Sreeram Nair

Ich denke, dass das ?als Platzhalter behandelt wird und daher nicht %3fin die URL konvertiert wird .
Sreeram Nair

5
Es ist dann ein Fehler für Python-Sphinx.
Scrapy

Welche Beziehung besteht zwischen dem verknüpften Adroll-Dokument und der Sphinx ...?
Tryph
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.