Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Substitutions inside links in reST / Sphinx

Tags:

I am using Sphinx to document a webservice that will be deployed in different servers. The documentation is full of URL examples for the user to click and they should just work. My problem is that the host, port and deployment root will vary and the documentation will have to be re-generated for every deployment.

I tried defining substitutions like this:

|base_url|/path .. |base_url| replace:: http://localhost:8080 

But the generated HTML is not what I want (doesn't include "/path" in the generated link):

<a href="http://localhost:8080">http://localhost:8080</a>/path 

Does anybody know how to work around this?

like image 223
Martin Blech Avatar asked Aug 04 '09 11:08

Martin Blech


1 Answers

New in Sphinx v1.0:

sphinx.ext.extlinks – Markup to shorten external links

https://www.sphinx-doc.org/en/master/usage/extensions/extlinks.html

The extension adds one new config value:

extlinks

This config value must be a dictionary of external sites, mapping unique short alias names to a base URL and a prefix. For example, to create an alias for the above mentioned issues, you would add

extlinks = {'issue':      ('http://bitbucket.org/birkenfeld/sphinx/issue/%s', 'issue ')} 

Now, you can use the alias name as a new role, e.g. :issue:`123`. This then inserts a link to http://bitbucket.org/birkenfeld/sphinx/issue/123. As you can see, the target given in the role is substituted in the base URL in the place of %s.

The link caption depends on the second item in the tuple, the prefix:

If the prefix is None, the link caption is the full URL. If the prefix is the empty string, the link caption is the partial URL given in the role content (123 in this case.) If the prefix is a non-empty string, the link caption is the partial URL, prepended by the prefix – in the above example, the link caption would be issue 123. You can also use the usual “explicit title” syntax supported by other roles that generate links, i.e. :issue:`this issue <123>`. In this case, the prefix is not relevant.

like image 160
dpeifer717 Avatar answered Oct 23 '22 10:10

dpeifer717