16

में लिंक के अंदर सबस्टिट्यूशंस मैं एक वेब सेवा दस्तावेज करने के लिए स्फिंक्स का उपयोग कर रहा हूं जो विभिन्न सर्वरों में तैनात किया जाएगा। दस्तावेज उपयोगकर्ता के क्लिक करने के लिए यूआरएल उदाहरणों से भरा है और उन्हें सिर्फ काम करना चाहिए। मेरी समस्या यह है कि मेजबान, बंदरगाह और तैनाती की जड़ अलग-अलग होगी और दस्तावेज को प्रत्येक तैनाती के लिए पुन: उत्पन्न करना होगा।रीस्ट/स्फिंक्स

मैं इस तरह प्रतिस्थापन को परिभाषित करने की कोशिश की:

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

करता है:

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

लेकिन सृजित HTML नहीं है जो मैं चाहता ("/ पथ" उत्पन्न लिंक में शामिल नहीं है) किसी को पता है कि इस के आसपास कैसे काम करना है?

+0

यह सुनिश्चित नहीं है कि यह इस प्रश्न के लिए प्रासंगिक है, लेकिन यह हो सकता है: http://stackoverflow.com/a/4836544/2988730। –

उत्तर

19

न्यू स्फिंक्स v1.0 में बाहरी लिंक को छोटा करें

extlinks

इस config मूल्य, बाहरी साइटों की एक शब्दकोश में होना चाहिए एक आधार यूआरएल और एक उपसर्ग के लिए अद्वितीय कम उर्फ ​​नाम मानचित्रण:http://sphinx.pocoo.org/ext/extlinks.html

एक्सटेंशन के लिए एक नया config मूल्य कहते हैं। उदाहरण के लिए, जैसा कि ऊपर उल्लेख मुद्दों के लिए एक उपनाम बनाने के लिए, आप अब

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

जोड़ना होगा, तो आप एक नई भूमिका है, उदा अन्य नाम का उपयोग कर सकते :issue:`123`। इसके बाद http://bitbucket.org/birkenfeld/sphinx/issue/123 पर एक लिंक डाला गया है। जैसा कि आप देख सकते हैं, भूमिका में दिए गए लक्ष्य को %s के स्थान पर मूल URL में प्रतिस्थापित किया गया है।

लिंक शीर्षक टपल में दूसरे मद पर निर्भर करता है, उपसर्ग:

उपसर्ग कोई नहीं है, तो लिंक शीर्षक संपूर्ण URL है। यदि उपसर्ग खाली स्ट्रिंग है, तो लिंक कैप्शन भूमिका सामग्री (123 इस मामले में 123) में दिया गया आंशिक URL है। यदि उपसर्ग एक गैर-खाली स्ट्रिंग है, तो लिंक कैप्शन आंशिक URL है, जिसे प्रीपेड किया गया है उपसर्ग - उपर्युक्त उदाहरण में, लिंक कैप्शन 123 जारी होगा। आप लिंक बनाने वाले अन्य भूमिकाओं द्वारा समर्थित सामान्य "स्पष्ट शीर्षक" वाक्यविन्यास का भी उपयोग कर सकते हैं, यानी :issue:`this issue <123>`। इस मामले में, उपसर्ग प्रासंगिक नहीं है।

+0

यह स्फिंक्स के लिए एक बढ़िया जोड़ा है। सर उठाने के लिए धन्यवाद! –

+3

स्पष्ट बताए जाने के जोखिम पर, आपको इसे अपने एक्सटेंशन 'conf.py' एक्सटेंशन = [' sphinx.ext.extlinks ']' में जोड़ना होगा। इसे समझने के लिए किसी को elses 'conf.py' ढूंढना पड़ा। – ideasman42

1

आप एक स्फिंक्स extension कि एक role

तरह
:apilink:`path` 

बनाता है और उस से लिंक उत्पन्न करता है लिख सकते हैं। मैंने कभी ऐसा नहीं किया, इसलिए मैं इस पॉइंटर को क्षमा करने से ज्यादा मदद नहीं कर सकता। आपको यह देखने की कोशिश करनी चाहिए कि विभिन्न भूमिकाएं कैसे लागू की जाती हैं। आपको लगता है कि बहुत से लोगों के समान हैं, मुझे लगता है।

+0

@ थोरियन: सूचक के लिए धन्यवाद और पूर्ण कार्यान्वयन को देखने के लिए मेरा उत्तर जांचें। –

+0

@ मार्टिन: अच्छा, अब हमारे पास एक अच्छा नमूना है। – tsg

4

ठीक है, मैंने यह कैसे किया है। सबसे पहले, 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/' लागू हो जाएगी) की स्थापना की। करने के लिए मार्कअप -

sphinx.ext.extlinks: मेरी फ़ाइल इस तरह दिखता है:

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> 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^