سؤال

أنا باستخدام أبو الهول إلى الوثيقة 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` 

ويولد الارتباط من ذلك. أنا لم يفعل هذا، لذلك لا يسعني أكثر من إعطاء هذا المؤشر، آسف. عليك أن تحاول أن ننظر إلى كيفية تنفيذ مختلف الأدوار. كثيرة هي تشبه الى حد بعيد ما تحتاج إليه، على ما أعتقد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top