Pourquoi le fichier html converti à partir du premier fichier contenant un point d'interrogation ne peut pas s'afficher sur le navigateur quand cliquer sur le catalogue?

14

Veuillez télécharger le fichier simple.7zet l'installer dans votre sphinx pour reproduire les problèmes que j'ai décrits ici, afin de le reproduire, vous pouvez exécuter:

make clean
make html   

téléchargez et installez dans votre sphinx pour reproduire les problèmes

Il y a deux articles dans sample/source, le contenu est le même, seule la différence est le titre.

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

L'un en contient ?, l'autre n'en contient pas ?. Une chose étrange s'est produite après la course 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

veuillez voir la vignette après avoir exécuté <code> make html </code> Problème 1:
Pourquoi firefox s'affiche-t-il alors sous la forme What does “_” in Python mean in a for-loop? Remarque: a "_"été combiné dans “_”;
Le titre qui ne contient aucun ?tel que celui qui a What does "_" in Python mean in a for-loop.htmlété compilé What does “_” in Python mean in a for-loop?, qui en ajoute un ??

Problème 2: pour cliquer sur le premier titre What does “_” in Python mean in a for-loop?, le navigateur passe à un étatno url was not found on this server

aucune URL n'a été trouvée sur ce serveur quand cliquer sur le premier titre Pour cliquer sur le deuxième titre What does “_” in Python mean in a for-loop?, cela fonctionne très bien. fonctionne bien quand cliquer sur le deuxième titre

Veuillez donner des explications sur mon problème.

grincheux
la source
1
Veuillez montrer votre reStructuredText à partir duquel Sphinx a généré ce code HTML.
Steve Piercy
print(“Hello”)??? Vous devez désactiver les citations "intelligentes".
kthy

Réponses:

6

Le problème 1 n'est en fait pas un problème, c'est le comportement normal de Sphinx: le titre affiché n'est pas le nom de fichier mais le titre de niveau supérieur du document ResT, qui se termine par un point d'interrogation dans les deux cas. Voir la table des matières > .. toctree :: > la section Entrées de cette page qui stipule:

Les titres des documents dans le toctree seront automatiquement lus à partir du titre du document référencé.

Si vous avez besoin d'être convaincu, changez simplement le titre de n'importe quel document, reconstruisez le HTML et voyez.


Le problème 2 est dû à la présence d'un point d'interrogation non codé en URL dans hrefle lien. Dans une URL, le point d'interrogation signifie le début d'une chaîne de requête .

C'est essayer d'accéder What does "_" in Python mean in a for-loop?.html, c'est demander le What does "_" in Python mean in a for-loopdocument HTML, lui donner un .htmlparamètre. Et évidemment, le document demandé est introuvable car il n'existe pas.

Dans la barre d'adresse de votre navigateur, vous pouvez remplacer le point d'interrogation par sa forme encodée en url %3Fet observer qu'il fonctionne alors.

Je n'ai trouvé aucun moyen de faire en sorte que sphinx code automatiquement les noms des documents dans les liens href( c'est en fait considéré comme un bug ) ou tout document exprimant clairement la restriction de nommage pour les documents ResT.

Mais je sais par expérience que nommer un fichier avec ponctuation est souvent source de problèmes . Je vous conseillerais de renommer votre document avec des caractères moins exotiques (les slugifier). Nommer votre document ResT underscore_in_for_loop.rstau lieu de vous What does "_" in Python mean in a for-loop?.rstfera gagner beaucoup de temps et vous évitera des maux de tête.

Et n'oubliez pas que cela ne devrait pas être un problème car, comme nous l'avons vu dans le premier numéro, le nom du document est utilisé uniquement pour l'URL.

Tryph
la source
4

?est un caractère générique pour la correspondance de mots partiels dans l'URL et sera donc traité comme un caractère spécial.

les jokers fonctionnent avec deux types de jokers:

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

Pour cela, vous devez encoder l'URL

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

Dans Python 3.x, vous devez importer urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)
Sreeram Nair
la source
2
joker opère avec 2 jokers
Sreeram Nair
Je pense que le ?est traité comme un caractère générique et qu'il n'est donc pas converti %3fen URL.
Sreeram Nair
5
C'est donc un bug pour python-sphinx.
scrapy
quelle est la relation entre doc adroll lié et sphinx ...?
Tryph