ما هي الطريقة الجيدة للعثور على المسارات النسبية في Google App Engine؟

StackOverflow https://stackoverflow.com/questions/61894

  •  09-06-2019
  •  | 
  •  

سؤال

لقد قمت بتنفيذ تطبيقات "الإحماء" التافهة باستخدام GAE.الآن أرغب في إنشاء شيء ما ببنية دليل أكثر تعقيدًا.شيء على غرار:

siteroot/
    models/
    controllers/
        controller1/
        controller2/
        ...
    templates/
        template1/
        template2/
        ...

..إلخ.ستكون وحدات التحكم عبارة عن وحدات Python للتعامل مع الطلبات.سيحتاجون بعد ذلك إلى تحديد موقع القوالب (نمط Django) في المجلدات المرتبطة.معظم التطبيقات التجريبية التي رأيتها تحل مسارات القوالب مثل هذا:

path = os.path.join(os.path.dirname(__file__), 'myPage.html')

... الخاصية __ ملف __ تحل محل البرنامج النصي الذي يتم تنفيذه حاليًا.لذلك، في المثال أعلاه، إذا كان برنامج Python النصي قيد التشغيل في وحدات التحكم/وحدة التحكم1/، فسيتم حل "myPage.html" إلى نفس الدليل - وحدات التحكم/وحدة التحكم1/myPage.html - وأفضل فصل ملفي بشكل واضح كود وقوالب بايثون.

الحل الذي قمت باختراقه معًا يبدو ...المأجور:

base_paths = os.path.split(os.path.dirname(__file__))
template_dir = os.path.join(base_paths[0], "templates")

لذلك، أقوم فقط بقص العنصر الأخير من المسار للبرنامج النصي قيد التشغيل حاليًا وإلحاق دليل القالب بالمسار الجديد.تبدو الحلول الأخرى (غير الخاصة بـ GAE) التي رأيتها لحل مسارات Python ثقيلة الوزن جدًا (مثل تقسيم المسارات إلى قوائم والتعامل معها وفقًا لذلك).يبدو أن Django لديه إجابة لهذا السؤال، لكنني أفضل الالتزام بـ GAE API، مقابل GAE API.إنشاء تطبيق Django كاملاً وتعديله لـ GAE.

أفترض أن أي شيء مشفر لن يكون ناجحًا، نظرًا لأن التطبيقات موجودة في مزرعة خوادم Google اللانهائية.إذن ما هي الطريقة الأفضل؟

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

المحلول

لا يمكنك استخدام المسارات النسبية، كما يقترح توني، لأنه ليس لديك ضمان بأن المسار من دليل العمل الخاص بك إلى دليل التطبيق الخاص بك سيبقى كما هو.

الحل الصحيح هو إما استخدام os.path.split، كما أنت، أو استخدام شيء مثل:

path = os.path.join(os.path.dirname(__file__), '..', 'templates', 'myPage.html')

أسلوبي المعتاد هو إنشاء مسار إلى دليل القالب باستخدام الطريقة المذكورة أعلاه، وتخزينه كعضو في كائن وحدة التحكم الخاصة بي، وتوفير طريقة "getTemplatePath" التي تأخذ اسم الملف المقدم وتربطه بالاسم الأساسي.

نصائح أخرى

ال dirname ترجع الدالة مسارًا مطلقًا، وتستخدم المسارات النسبية.تعرف على الدليل الحالي عند تنفيذ وحدات التحكم الخاصة بك os.path.abspath(os.path.curdir) وقم ببناء مسار للقوالب المتعلقة بهذا الموقع (بدون الامتداد os.path.abspath جزء بالطبع).

لن يعمل هذا إلا إذا كان الدليل الحالي موجودًا في مكان ما بالداخل com.siteroot, ، وإلا يمكنك القيام بشيء مثل هذا:

template_dir = os.path.join(os.path.dirname(__file__), os.path.pardir, "templates")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top