ファイルsimple.7z
をダウンロードしてsphinxにインストールし、ここで説明した問題を再現してください。再現するには、次のコマンドを実行します。
make clean
make html
問題を再現するには、sphinxにダウンロードしてインストールしてください
sample/source
には2つの記事があります。内容は同じですが、タイトルだけが異なります。
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
1つは?
を含み、もう1つは?
を含みません。 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
問題1:
FirefoxがWhat does “_” in Python mean in a for-loop?
と表示される理由:"_"
は“_”
に統合されました。?
などのWhat does "_" in Python mean in a for-loop.html
を含まないタイトルは、What does “_” in Python mean in a for-loop?
にコンパイルされ、?
が追加されますか?
問題2:最初のタイトルWhat does “_” in Python mean in a for-loop?
をクリックするには、ブラウザがステータスno url was not found on this server
にジャンプします
2番目のタイトルWhat does “_” in Python mean in a for-loop?
をクリックすると、正常に動作します。
私の問題について説明してください。
問題1は実際には問題ではなく、Sphinxの通常の動作です。表示されるタイトルはファイル名ではなく、ResTドキュメントの最上位のタイトルです、どちらの場合も疑問符で終わります。 目次を参照してください>.. toctree ::>エントリこのページ のセクション:
Toctree内のドキュメントのタイトルは、参照されるドキュメントのタイトルから自動的に読み取られます。
納得する必要がある場合は、ドキュメントのタイトルを変更し、HTMLを再構築して確認してください。
問題2は、リンクのhref
にURLエンコードされていない疑問符が含まれていることが原因です。 URLでは、疑問符は クエリ文字列 の開始を意味します。
これはWhat does "_" in Python mean in a for-loop?.html
にアクセスしようとしています。つまり、What does "_" in Python mean in a for-loop
HTMLドキュメントを要求し、.html
パラメータを指定します。そして明らかに、要求されたドキュメントは存在しないため見つかりません。
ブラウザのアドレスバーで、疑問符をそのurlencoded形式%3F
に置き換え、それが機能することを確認できます。
リンクのhref
( 実際にはバグと見なされます )またはResTドキュメントの命名制限を明確に表現しているドキュメントで、sphinxがドキュメント名を自動的にurlencodeする方法は見つかりませんでした。
しかし、私は経験から、句読点を使用してファイルに名前を付けることが問題の原因となることが多いことを知っています。 エキゾチックな文字を少なくしてドキュメントの名前を変更することをお勧めします(それらを汚す)。 ResTドキュメントにunderscore_in_for_loop.rst
ではなくWhat does "_" in Python mean in a for-loop?.rst
と名前を付けると、時間と頭痛の種を大幅に節約できます。
また、最初の問題で見たように、ドキュメント名はURLにのみ使用されるため、問題にはならないことを覚えておいてください。
?
は ワイルドカード であり、URL内の一部の単語が一致するため、特殊文字として扱われます。
ワイルドカードは2種類のジョーカーで機能します。
? - any character (one and only one)
* - any characters (zero or more)
このためには、あなたは RLをエンコードする する必要があります
import urllib.parse
>>> urllib.parse.quote(<<url>>)
Python 3.xでは、urllib.parse.quoteをインポートする必要があります:
import urllib.parse
urllib.parse.quote(<<url>>)