Perché il file html convertito dal primo file contenente il punto interrogativo non può essere visualizzato sul browser quando si fa clic sul catalogo?


14

Si prega di scaricare il file simple.7ze installarlo nella tua sfinge per riprodurre i problemi che ho descritto qui, al fine di riprodurlo, è possibile eseguire:

make clean
make html   

scarica e installa nella tua sfinge per riprodurre i problemi

Ci sono due articoli in sample/source, il contenuto è lo stesso, l'unica differenza è il titolo.

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

Uno contiene ?al suo interno, l'altro non contiene ?. Una cosa strana succede dopo aver corso 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

vedere il riquadro dopo aver eseguito <code> make html </code> Problema 1:
Perché firefox mostra tutto quindi come What does “_” in Python mean in a for-loop? Nota: è "_"stato combinato in “_”;
Il titolo che non contiene nulla di ?simile è What does "_" in Python mean in a for-loop.htmlstato compilato What does “_” in Python mean in a for-loop?, che aggiunge un ?in esso?

Problema 2: per fare clic sul primo titolo What does “_” in Python mean in a for-loop?, il browser passa a uno statono url was not found on this server

non è stato trovato alcun URL su questo server quando si fa clic sul primo titolo Per fare clic sul secondo titolo What does “_” in Python mean in a for-loop?, funziona benissimo. funziona bene quando si fa clic sul secondo titolo

Per favore, dai una spiegazione sul mio problema.


1
Mostra il tuo testo reStructured da cui Sphinx ha generato questo codice HTML.
Steve Piercy,

print(“Hello”)??? Devi disattivare le virgolette "intelligenti".
kthy,

Risposte:


6

Il numero 1 in realtà non è un problema, è il normale comportamento di Sphinx: il titolo visualizzato non è il nome file ma il titolo di livello superiore del documento ResT, che termina con un punto interrogativo in entrambi i casi. Vedi il Sommario > .. toctree :: > sezione Voci di questa pagina che afferma:

I titoli dei documenti nel toctree verranno letti automaticamente dal titolo del documento di riferimento.

Se devi essere convinto, basta cambiare il titolo di qualsiasi documento, ricostruire l'HTML e vedere.


Il problema 2 è causato dalla presenza di un punto interrogativo non urlenced nel hrefcollegamento. In un url, il punto interrogativo indica l'inizio di una stringa di query .

Quello che sta provando ad accedere What does "_" in Python mean in a for-loop?.html, significa richiedere il What does "_" in Python mean in a for-loopdocumento HTML, dandogli un .htmlparametro. E ovviamente, il documento richiesto non è stato trovato poiché non esiste.

Nella barra degli indirizzi del browser, è possibile sostituire il punto interrogativo con la sua forma codificata %3Fe osservare che funziona allora.

Non ho trovato alcun modo per far sì che Sphinx urlencode automaticamente i nomi dei documenti nei link href( in realtà è considerato un bug ) o qualsiasi documento che esprima chiaramente una limitazione di denominazione per i documenti ResT.

Ma so per esperienza che la denominazione di un file con punteggiatura è spesso fonte di problemi . Ti consiglierei di rinominare il tuo documento con caratteri meno esotici (ridimensionali). Assegnare un nome al tuo documento ResT underscore_in_for_loop.rstinvece di What does "_" in Python mean in a for-loop?.rstfarti risparmiare un sacco di tempo e mal di testa.

E ricorda che non dovrebbe essere un problema poiché, come abbiamo visto nel primo numero, il nome del documento viene utilizzato solo per l'URL.


4

?è un carattere jolly per la corrispondenza delle parole parte nell'URL e pertanto verrà trattato come un carattere speciale.

i jolly funzionano con due tipi di jolly:

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

Per questo, devi codificare l'URL

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

In Python 3.x, devi importare urllib.parse.quote:

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

2
il jolly funziona con 2 jolly
Sreeram Nair il

Penso che ?sia trattato come un jolly e quindi non lo converta %3fnell'URL.
Sreeram Nair,

5
Quindi è un bug per la pitone-sfinge.
trasandato il

qual è la relazione tra il documento adroll collegato e la sfinge ...?
Tryph
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.