在reStructuredText中的新窗口中打开一个链接

Jim*_*ket 36 restructuredtext

我想使用reStucturedText在新窗口中打开一个链接.这可能吗?

这将在同一窗口中打开链接:

You can `check your location here. <http://geoiptool.com>`_
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 33

要在新窗口或标记中打开页面,您可以将属性添加target="_blank"到超链接,尽管我不确定如何在reStructuredText中向内联超链接添加属性.但是,从Docutils FAQ中可以嵌套内联标记,您可以使用该raw指令将原始HTML包含在文档中,例如

You can |location_link|.

.. |location_link| raw:: html

   <a href="http://geoiptool.com" target="_blank">check your location here</a>
Run Code Online (Sandbox Code Playgroud)

更新以解决评论

我有一个问题"为什么reStructuredText没有[ 插入一些很棒的功能 ]".

在这种情况下,"为什么reStructuredText没有办法指定如何打开链接" - 我认为reStructuredText没有一种简单的方法可以做到这一点,因为点击链接的工作方式并不是真正的责任.reStructuredText转换标记 - 最终显示标记的方式不是reStructuredText,而是用户选择使用的浏览器或查看器.

在Web浏览器中打开链接的情况下,良好的可用性练习要求您不要强迫用户在新选项卡中打开链接(这正是添加target="_blank"正在进行的操作).相反,您应该选择如何打开用户的链接.如果用户想要在新选项卡中打开链接,那么他们可以使用鼠标中键(或者他们喜欢的任何快捷键).

所以我认为reStructureText没有一个简单的target="_blank"功能是完全可以接受的.对于那些真正想要做到这一点的人来说,这是可能的,这是很好的事实,这样做有点痛苦的事实对于劝阻这种做法是有好处的.

  • 很好的答案.似乎奇怪的是reStructuredText不会有更简单的方法来做到这一点,但我知道什么......谢谢你; 它就像http://www.readthedocs.org文档这样的系统的魅力. (2认同)

Rog*_*ton 11

与Ivonet 的回答类似,但不修改主题:

\n

首先,安装sphinxcontrib-jquery

\n
$ pip install sphinxcontrib-jquery\n
Run Code Online (Sandbox Code Playgroud)\n

然后,按如下方式编辑该conf.py文件:

\n
extensions = [\n    \xe2\x80\xa6\n    \'sphinxcontrib.jquery\',\n]\n\nhtml_js_files = [\n    \'js/custom.js\'\n]\n
Run Code Online (Sandbox Code Playgroud)\n

最后,将custom.js文件添加到文件夹中_static/js

\n
$(document).ready(function () {\n   $(\'a[href^="http://"], a[href^="https://"]\').not(\'a[class*=internal]\').attr(\'target\', \'_blank\');\n});\n
Run Code Online (Sandbox Code Playgroud)\n

这个较短的版本现在也适用于 JQuery:

\n
$(document).ready(function () {\n    $(\'a.external\').attr(\'target\', \'_blank\');\n});\n
Run Code Online (Sandbox Code Playgroud)\n


Ivo*_*net 6

我完全同意接受的答案,尤其是 reStructuredText 不负责链接行为的部分。

我仍然想要它,所以它应该在主题中解决。由于我希望我的所有外部链接都在新选项卡中打开,因此如上所述执行此操作变得非常麻烦。

就我而言,我使用第三方主题 (sphinx_rtd_theme),并将以下脚本放在 layout.html 的末尾附近:

  <script type="text/javascript">
    <!-- Adds target=_blank to external links -->

    $(document).ready(function () {
      $('a[href^="http://"], a[href^="https://"]').not('a[class*=internal]').attr('target', '_blank');
    });
  </script>
Run Code Online (Sandbox Code Playgroud)

它似乎可以很好地完成这项工作。希望能帮助到你。