سؤال

<py:match path="foo">
    <?python
        import os
        href = select('@href').render()
        SOMEWHERE = ...  # what file contained the foo tag?
        path = os.path.abspath(os.path.join(os.path.dirname(SOMEWHERE), href)
        f = file(path,'r')
        # (do something interesting with f)
    ?>
</py:match>
...
<foo href="../path/relative/to/this/template/abcd.xyz"/>

وماذا يجب ان تذهب ب "مكان ما" أعلاه؟ أريد أن السمة href أن تكون نسبة إلى ملف مع العلامة foo في ذلك، مثل سمات href على العلامات الأخرى.

وبدلا من ذلك، ما هو ملف يتضمن الحمر: كتلة المباراة؟ وهذا هو أقل جودة لأنه قد يكون في دليل مختلف من الملف مع العلامة foo.

وحتى أقل جودة: I يمكن أن توفر مسار الملف أنا جعل كحجة السياق من خارج Genshi، ولكن قد يكون في دليل مختلف من كل ما سبق

هل كانت مفيدة؟

المحلول

وأنت بحاجة للتأكد من أن البرنامج سائق (أي برنامج بايثون الذي يوزع ملف الإدخال) يعمل في الدليل من الملف الذي يحتوي على بطاقة foo. خلاف ذلك، تحتاج إلى تمرير أسفل المسار النسبي (أي كيفية الحصول عليها من الدليل الذي القارئ يعمل على دليل ملف يتم قراءتها) كحجة السياق إلى رمز بيثون الخاص بك وإضافته إلى الأمر os.path.join.

مع هذا الإعداد (وباستخدام Genshi 0.6 مثبتة على ماك X 10.6.3 عبر حزمة فينك genshi-py26) وos.getcwd() قيادة إرجاع دليل العمل الحالي من الملف الذي يحتوي على بطاقة foo.

لمثل هذه التركيبات مسار معقدة كما أوصي بشدة لاستخدام path=os.path.normpath(path)، وبما انك قد لا تريد مثل هذه الأمور لتسرب في الناتج كود HTML الخاص بك.

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