التبديلات داخل الروابط في بقية / أبو الهول
-
22-07-2019 - |
سؤال
أنا باستخدام أبو الهول إلى الوثيقة a خدمة ويب التي سيتم نشرها في ملقمات مختلفة.وثائق كاملة من رابط الأمثلة على المستخدم انقر وأنها يجب أن تعمل فقط.مشكلتي هي أن host, port ونشر الجذر سوف تختلف الوثائق سوف تضطر إلى إعادة إنشاء كل النشر.
حاولت تحديد بدائل مثل هذا:
|base_url|/path
.. |base_url| replace:: http://localhost:8080
ولكن HTML الذي تم إنشاؤه ليس ما أريد (لا تشمل "/مسار" في إنشاء رابط):
<a href="http://localhost:8080">http://localhost:8080</a>/path
هل يعرف أحد كيفية العمل حول هذا ؟
المحلول
الجديد في أبو الهول v1.0:
أبو الهول.تحويلة.extlinks العلامات لتقصير الروابط الخارجية
http://sphinx.pocoo.org/ext/extlinks.html
ويضيف تمديد واحد جديد التكوين القيمة:
extlinks
هذا التكوين يجب أن تكون قيمة القاموس الخارجية المواقع ورسم الخرائط قصيرة فريدة من نوعها الأسماء المستعارة إلى قاعدة URL بادئة.على سبيل المثال ، إنشاء اسم مستعار المسائل المذكورة أعلاه, يمكنك إضافة
extlinks = {'issue':
('http://bitbucket.org/birkenfeld/sphinx/issue/%s', 'issue ')}
الآن يمكنك استخدام اسم مستعار مثل دور جديد ، على سبيل المثال :issue:`123`
.هذا ثم إدراج رابط http://bitbucket.org/birkenfeld/sphinx/issue/123.كما يمكنك أن ترى, هدف معين في الدور استبداله في عنوان URL الأساسي في مكان %s
.
رابط التعليق يعتمد على البند الثاني في المجموعة ، البادئة:
إذا كانت هي البادئة أي رابط التعليق هو عنوان URL الكامل.إذا البادئة هي سلسلة فارغة, رابط التعليق هو جزئي عنوان معين في دور المحتوى (123 في هذه الحالة.)
إذا البادئة هو غير فارغة, رابط التعليق هو جزئي URL إرفاق مسبقا من خلال البادئة – في المثال أعلاه, رابط التعليق سيكون مسألة 123.يمكنك أيضا استخدام المعتاد "صريحة عنوان" بناء الجملة بدعم من الأدوار الأخرى التي تولد وصلات ، أي :issue:`this issue <123>`
.في هذه الحالة ، البادئة ليست ذات صلة.
نصائح أخرى
وطيب، وهنا كيف فعلت ذلك. الأول، apilinks.py
(تمديد أبو الهول):
from docutils import nodes, utils
def setup(app):
def api_link_role(role, rawtext, text, lineno, inliner, options={},
content=[]):
ref = app.config.apilinks_base + text
node = nodes.reference(rawtext, utils.unescape(ref), refuri=ref,
**options)
return [node], []
app.add_config_value('apilinks_base', 'http://localhost/', False)
app.add_role('apilink', api_link_role)
والآن، في conf.py
، إضافة 'apilinks'
إلى قائمة ملحقات وتحديد قيمة مناسبة ل'apilinks_base'
(وإلا، فإنه سيتم الافتراضي إلى 'http://localhost/'
). ملفي يبدو مثل هذا:
extensions = ['sphinx.ext.autodoc', 'apilinks']
# lots of other stuff
apilinks_base = 'http://host:88/base/'
والاستعمال:
:apilink:`path`
وإخراج:
<a href="http://host:88/base/path">http://host:88/base/path</a>
وكان لي مشكلة مماثلة حيث كنت بحاجة إلى استبدال أيضا عناوين المواقع في الأهداف الصورة.
وextlinks
لا توسيع عندما تستخدم على النحو قيمة السمة صورة :target:
.
في نهاية المطاف كتبت التحول أبو الهول المخصصة التي يعيد كتابة عناوين المواقع التي تبدأ مع بادئة معينة، في حالتي، http://mybase/
. هنا هو رمز ذات الصلة لconf.py:
from sphinx.transforms import SphinxTransform
class ReplaceMyBase(SphinxTransform):
default_priority = 750
prefix = 'http://mybase/'
def apply(self):
from docutils.nodes import reference, Text
baseref = lambda o: (
isinstance(o, reference) and
o.get('refuri', '').startswith(self.prefix))
basetext = lambda o: (
isinstance(o, Text) and o.startswith(self.prefix))
base = self.config.mybase.rstrip('/') + '/'
for node in self.document.traverse(baseref):
target = node['refuri'].replace(self.prefix, base, 1)
node.replace_attr('refuri', target)
for t in node.traverse(basetext):
t1 = Text(t.replace(self.prefix, base, 1), t.rawsource)
t.parent.replace(t, t1)
return
# end of class
def setup(app):
app.add_config_value('mybase', 'https://en.wikipedia.org/wiki', 'env')
app.add_transform(ReplaceMyBase)
return
وهذا يوسع مصدر RST التالية للإشارة إلى ويكيبيديا الإنجليزية.
عندما mybase="https://es.wikipedia.org/wiki"
مجموعات conf.py الروابط من شأنه أن يشير إلى ويكي الاسباني.
* inline link http://mybase/Helianthus
* `link with text <http://mybase/Helianthus>`_
* `link with separate definition`_
* image link |flowerimage|
.. _link with separate definition: http://mybase/Helianthus
.. |flowerimage| image:: https://upload.wikimedia.org/wikipedia/commons/f/f1/Tournesol.png
:target: http://mybase/Helianthus
ويمكنك إرسال بريد أبو الهول تمديد أن يخلق <لأ href = "HTTP: / /sphinx.pocoo.org/markup/inline.html "يختلط =" نوفولو noreferrer "> دور مثل
:apilink:`path`
ويولد الارتباط من ذلك. أنا لم يفعل هذا، لذلك لا يسعني أكثر من إعطاء هذا المؤشر، آسف. عليك أن تحاول أن ننظر إلى كيفية تنفيذ مختلف الأدوار. كثيرة هي تشبه الى حد بعيد ما تحتاج إليه، على ما أعتقد.