为什么从包含问号的第一个文件转换而来的html文件在单击目录时无法显示在浏览器上?


14

请下载文件simple.7z并安装在您的sphinx中以重现我在这里描述的问题,为了重现它,您可以运行:

make clean
make html   

下载并安装在您的狮身人面像以重现问题

中有两篇文章sample/source,内容相同,只是标题不同。

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

一个包含?在其中,另一个不包含?。跑步后发生了奇怪的事情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

请在运行<code> make html </ code>后查看磁贴 问题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

何时单击第一个标题在此服务器上找不到URL 要单击第二个标题What does “_” in Python mean in a for-loop?,它可以正常工作。 单击第二个标题时效果很好

请说明我的问题。


1
请显示Sphinx从中生成此HTML的reStructuredText。
史蒂夫·皮尔西

print(“Hello”)??? 您需要关闭“智能”引号。
kthy

Answers:


6

问题1实际上不是问题,这是Sphinx的正常行为:显示的标题不是文件名,而是ResT文档的顶级标题,在两种情况下都以问号结尾。请参阅此页面的目录 > .. toctree :: > 条目部分,其中指出:

将会从引用文档的标题中自动读取toctree中的文档标题。

如果需要说服,只需更改任何文档的标题,重建HTML即可查看。


问题2是由链接的中存在未编码的问号href引起的。在url中,问号表示查询字符串的开头。

那就是尝试访问What does "_" in Python mean in a for-loop?.html,这意味着请求What does "_" in Python mean in a for-loopHTML文档,并为其提供一个.html参数。显然,找不到请求的文档,因为它不存在。

在浏览器的地址栏中,您可以用问号将其替换为urlencode形式%3F,然后观察它是否有效。

我没有找到任何方法可以使sphinx自动在链接的文件名href实际上被认为是bug)或任何明确表达ResT文档命名限制的文档中使用urlencode文档名称。

但是我从经验中知道,使用标点符号命名文件经常是问题的根源我建议您使用较少的外来字符来重命名文档(对它们进行分类)。命名ResT文档underscore_in_for_loop.rst而不是命名What does "_" in Python mean in a for-loop?.rst将节省大量时间和麻烦。

请记住,这应该不是问题,因为正如我们在第一期中所看到的那样,文档名称仅用于URL。


4

?通配符,用于URL中的部分单词匹配,因此将被视为特殊字符。

通配符与两种类型的玩笑者一起使用:

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

为此,您必须对URL进行编码

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

在Python 3.x中,您需要导入urllib.parse.quote:

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

2
通配符与2个小丑一起使用
Sreeram Nair

我认为将?视为通配符,因此不会将其转换%3f为URL。
Sreeram Nair

5
那么这是python-sphinx的错误。
scrapy

链接的广告文档和狮身人面像之间有什么关系...?
Tryph
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.