اذهب إلى المحتوى

السؤال

نشر (معدل)

لقد قمت بتغيير اسم التطبيق في جانغو Django عن طريق إعادة تسمية المجلد وجمل الإستدعاء imports وجميع (القوالب templates / الفهارس indexes). لكني الآن أحصل على هذا الخطأ عندما أحاول تشغيل المشروع عن طريق الأمر التالي:

python manager.py runserver

الخطأ الذي يظهر كالتالي:

Error: Could not import settings 'appname.settings' (Is it on sys.path?): No module named settings

كيف يمكنني تصحيح هذا الخطأ وحلّه؟ أو كيف يمكنني إعادة تسميه مشروع جانغو Django؟ 

تم التعديل في بواسطة Amer Abdallah

Recommended Posts

  • 1
نشر

يمكنك أن تتبع الخطوات التالية لتغيير اسم التطبيق في مشروع جانغو Django:

  1. أعد تسمية المجلد الموجود في جذر مشروعك (مجلد المشروع الرئيسي)

  2. غيّر أي مراجع لتطبيقك وكل تبعياتها dependencies، على سبيل المثال، الملفات views.py و urls.py و management.py و settings.py

  3. قم بتعديل جدول قاعدة البيانات django_content_type باستخدام الأمر التالي:

    UPDATE django_content_type SET app_label='<NewAppName>' WHERE app_label='<OldAppName>'

     

  4. إذا كانت لديك نماذج، فسيتعين عليك إعادة تسمية جداول النماذج. بالنسبة إلى postgreSQL و mysql، استخدم الأمر التالي:

    ALTER TABLE <oldAppName>_modelName RENAME TO <newAppName>_modelName

     

  5. إن كنت تستخدم الإصدار 1.7 أو أعلى من جانغو Django، فيجب أن تقوم بتحديث جدول django_migrations لتجنب إعادة تشغيل عمليات الترحيل السابقة:

    UPDATE django_migrations SET app='<NewAppName>' WHERE app='<OldAppName>'

     

  6. إذا كانت Meta Class الموجود في الملف models.py يحتوي على app_name، فتأكد من إعادة تسمية ذلك أيضًا.

  7. إذا قمت بوضع مجلدات ثابتة static أو قوالب templates داخل تطبيقك، فستحتاج أيضًا إلى إعادة تسميتها. على سبيل المثال، أعد تسمية OldAppName /static/OldAppName إلى NewAppName/static/NewAppName.

  8. لإعادة تسمية نماذج جانغو Django، ستحتاج إلى تغيير django_content_type.name في قاعدة البيانات. بالنسبة لـ postgreSQL و mysql، استخدم الأمر التالي:

    UPDATE django_content_type SET name='<newModelName>' where name='<oldModelName>' AND app_label='<OldAppName>'

     

  9. يجب إزالة المجلد __pycache __ الموجود داخل التطبيق، وإلا ستحصل على خطأ من نوع EOFError:

    EOFError: marshal data too short when trying to run the server

     

بعد ذلك يمكنك إعادة تشغيل المشروع بدون مشكلة وستجد أن اسم المشروع قد تغير في كل الإماكن.

  • 0
نشر

تتبع الخطوات التالية لإعادة تسمية التطبيق في جانغو:
أولاً: قم بإعادة تسمية مجلد التطبيق، على سبيل المثال ليكن اسم التطبيق القديم هو  "app1" و "app2" هو اسم التطبيق الجديد.

mv ./app1 ./app2

ثم قم بتحديث كافة عمليات الاستيراد التي تشير إلى المجلد القديم وقم بجعلها تشير إلى الجديد. مثال:

from myproject.app1 import models ----> from myproject.app2 import models

ثم قم بتحديث مراجع اسم التطبيق القديم داخل عمليات ترحيل Django. أمثلة على التغييرات التي قد تضطر إلى القيام بها:

# قبل
dependencies = [
    ('app1', '...'),
]
# بعد
dependencies = [
    ('app2', '...'),
]
# قبل
field = models.ForeignKey(
    default=None, on_delete=django.db.models.deletion.CASCADE,
    to='old_app.Experiment'
)
# بعد
field = models.ForeignKey(
    default=None, on_delete=django.db.models.deletion.CASCADE,
    to='new_app.Experiment'
)

ثم قم بعمل commit في هذه المرحلة. بعد ذلك، يمكنك تشغيل عمليات ترحيل التطبيق في بيئة منشورة، قم بتشغيل django_rename_app قبل تشغيل عمليات الترحيل في هذه العملية. على سبيل المثال ، قبل "python manager.pyigration --noinput" ، كما يوضح المثال التالي:

# قبل
python manage.py collectstatic --noinput
python manage.py migrate --noinput
gunicorn my_project.wsgi:application
# بعد
python manage.py collectstatic --noinput
python manage.py rename_app old_app new_app
python manage.py migrate --noinput
gunicorn my_project.wsgi:application

سيؤدي هذا إلى تحديث اسم التطبيق في جداول قاعدة بيانات Django الداخلية التالية:

django_content_type
django_migrat2ions 

وإعادة تسمية بادئة "prefix" جميع جداولك لتبدأ باسم التطبيق الجديد، بدلاً من الاسم القديم.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...