¿Por qué el archivo html convertido del primer archivo que contiene el signo de interrogación no se puede mostrar en el navegador cuando se hace clic en el catálogo?

14

Descargue el archivo simple.7ze instálelo en su esfinge para reproducir los problemas que describí aquí, para reproducirlo, puede ejecutar:

make clean
make html   

descargue e instale en su esfinge para reproducir problemas

Hay dos artículos en sample/source, el contenido es el mismo, la única diferencia es el título.

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 ?, el otro no contiene ?. Algo extraño sucedió después de correr 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

vea el mosaico después de ejecutar <code> make html </code> Problema 1:
¿Por qué Firefox muestra todo esto como What does “_” in Python mean in a for-loop? Nota: "_"se combinó en “_”;
El título que no contiene ?tal como What does "_" in Python mean in a for-loop.htmlfue compilado What does “_” in Python mean in a for-loop?, ¿qué agrega un ??

Problema 2: para hacer clic en el primer título What does “_” in Python mean in a for-loop?, el navegador salta a un estadono url was not found on this server

no se encontró ninguna URL en este servidor al hacer clic en el primer título Para hacer clic en el segundo título What does “_” in Python mean in a for-loop?, funciona bien. funciona bien cuando se hace clic en el segundo título

Por favor, explique mi problema.

tembloroso
fuente
1
Muestre su texto reStructuredText a partir del cual Sphinx generó este HTML.
Steve Piercy
print(“Hello”)??? Debe desactivar las citas "inteligentes".
kthy

Respuestas:

6

El problema 1 en realidad no es un problema, es el comportamiento normal de Sphinx: el título que se muestra no es el nombre de archivo sino el título de nivel superior del documento ResT, que termina con un signo de interrogación en ambos casos. Vea la Tabla de contenido > .. toctree :: > Sección de entradas de esta página que dice:

Los títulos de los documentos en el toctree se leerán automáticamente del título del documento referenciado.

Si necesita convencerse, simplemente cambie el título de cualquiera de los documentos, reconstruya el HTML y vea.


El problema 2 es causado por la presencia de un signo de interrogación no codificado en hrefel enlace. En una url, el signo de interrogación significa el inicio de una cadena de consulta .

Eso es intentar acceder What does "_" in Python mean in a for-loop?.html, significa solicitar el What does "_" in Python mean in a for-loopdocumento HTML, dándole un .htmlparámetro. Y obviamente, el documento solicitado no se encuentra ya que no existe.

En la barra de direcciones de su navegador, puede reemplazar el signo de interrogación por su forma codificada %3Fy observar que funciona.

No encontré ninguna manera de hacer que Sphinx codifique automáticamente los nombres de los documentos en los enlaces href( en realidad se considera un error ) o cualquier documento que exprese claramente la restricción de nombres para los documentos ResT.

Pero sé por experiencia que nombrar un archivo con puntuación es a menudo fuente de problemas . Le recomendaría que cambie el nombre de su documento con caracteres menos exóticos (slugifíquelos). Nombrar su documento ResT en underscore_in_for_loop.rstlugar de What does "_" in Python mean in a for-loop?.rstle ahorrará mucho tiempo y dolores de cabeza.

Y recuerde que no debería ser un problema ya que, como vimos en el primer número, el nombre del documento se usa solo para la URL.

Tryph
fuente
4

? es un comodín para la coincidencia de palabras parciales en URL y, por lo tanto, será tratado como un carácter especial

los comodines funcionan con dos tipos de comodines:

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

Para esto, debes codificar la URL

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

En Python 3.x, debe importar urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)
Sreeram Nair
fuente
2
comodín opera con 2 comodines
Sreeram Nair
Creo que ?se trata como un comodín y, por lo tanto, no se convierte %3fen la URL.
Sreeram Nair el
55
Es un error para python-sphinx entonces.
tembloroso
¿Cuál es la relación entre adroll doc vinculado y sphinx ...?
Tryph