Por que o arquivo html convertido do primeiro arquivo contendo ponto de interrogação não pode ser exibido no navegador quando clicar no catálogo?

14

Faça o download do arquivo simple.7ze instale na sua esfinge para reproduzir os problemas que descrevi aqui. Para reproduzi-lo, você pode executar:

make clean
make html   

faça o download e instale na sua esfinge para reproduzir problemas

Existem dois artigos sample/source, o conteúdo é o mesmo, a única diferença é o 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

Um contém ?nele, o outro não contém ?. Coisa estranha aconteceu depois 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

veja o bloco depois de executar o <code> make html </code> Problema 1:
Por que o firefox foi exibido como What does “_” in Python mean in a for-loop? Nota: "_"foi combinado “_”;
O título que não contém o ?que What does "_" in Python mean in a for-loop.htmlfoi compilado What does “_” in Python mean in a for-loop?, que adiciona um ?nele?

Problema 2: para clicar no primeiro título What does “_” in Python mean in a for-loop?, o navegador salta para um statusno url was not found on this server

nenhum URL não foi encontrado neste servidor quando clicar no primeiro título Para clicar no segundo título What does “_” in Python mean in a for-loop?, funciona bem. funciona bem quando clicar no segundo título

Por favor, explique meu problema.

raspar
fonte
11
Mostre seu reStructuredText a partir do qual o Sphinx gerou esse HTML.
Steve Piercy
print(“Hello”)??? Você precisa desativar as aspas "inteligentes".
Kdy

Respostas:

6

O problema 1 não é realmente um problema, é o comportamento normal do Sphinx: o título exibido não é o nome do arquivo, mas o título de nível superior do documento ResT, que termina com um ponto de interrogação nos dois casos. Veja o Índice > .. toctree :: > Entradas seção desta página , que afirma:

Os títulos do documento na toctree serão lidos automaticamente a partir do título do documento referenciado.

Se você precisa se convencer, basta alterar o título de qualquer documento, reconstruir o HTML e ver.


O problema 2 é causado pela presença de um ponto de interrogação não codificado em url no hreflink. Em um URL, o ponto de interrogação significa o início de uma string de consulta .

Isso é tentar acessar What does "_" in Python mean in a for-loop?.html, significa solicitar o What does "_" in Python mean in a for-loopdocumento HTML, fornecendo um .htmlparâmetro. E, obviamente, o documento solicitado não foi encontrado, pois não existe.

Na barra de endereço do seu navegador, você pode substituir o ponto de interrogação pelo formato codificado em url %3Fe observar que ele funciona.

Não encontrei nenhuma maneira de fazer com que o sphinx urlencode automaticamente os nomes de documentos nos links href( na verdade, é considerado um bug ) ou em qualquer documento que expresse claramente a restrição de nomenclatura para documentos ResT.

Mas sei por experiência que nomear um arquivo com pontuação geralmente é fonte de problemas . Aconselho você a renomear seu documento com caracteres menos exóticos (slugify-los). Nomear seu documento ResT em underscore_in_for_loop.rstvez de What does "_" in Python mean in a for-loop?.rsteconomizará muito tempo e dores de cabeça.

E lembre-se de que não deve ser um problema, pois, como vimos na primeira edição, o nome do documento é usado apenas para o URL.

Tryph
fonte
4

?é um curinga para correspondência de parte da palavra no URL e, portanto, será tratado como um caractere especial.

os curingas operam com dois tipos de curingas:

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

Para isso, você deve codificar o URL

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

No Python 3.x, você precisa importar urllib.parse.quote:

import urllib.parse
urllib.parse.quote(<<url>>)
Sreeram Nair
fonte
2
o caractere curinga opera com 2 curingas
Sreeram Nair 23/12/19
Eu acho que o ?é tratado como um curinga e, portanto, não o está convertendo %3fno URL.
Sreeram Nair
5
É um bug para python-sphinx então.
scrapy
qual é a relação entre doc adroll vinculado e esfinge ...?
Tryph