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

ما الفرق بين إستخدام Path أو os.path في BASE_DIR في جانغو Django

Haitham Owda2

السؤال

BASE_DIR = Path(__file__).resolve().parent.parent

ما الفرق بينهم Django

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

 

تم التعديل في بواسطة سامح أشرف
تنسيق الشيفرة - توضيح العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 3

في الماضي كان جانغو Django يقوم بتخزين BASE_DIR في شكل نص عادي String لذلك كان يمكنك أن تقوم بإستخدام الكود التالي:
 

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

وكان يمكنك أن تقوم بعمل المسارات من خلال الكود التالي:
 

os.path.join(BASE_DIR, ...)

لكن بداية من الإصدار 3.1 أصبح جانغو يحتاج إلى أن يكون المتغير BASE_DIR عبارة عن كائن Path لذلك يجب أن تستخدم الكود التالي:

from pathlib import Path

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

وأصبح يمكنك إنشاء المسارات من خلال الكود التالي:

BASE_DIR / 'subdir'

وبالتالي يكون عمل المسارت أمرًا أسهل بكثير من خلال الكود السابق.

ملاحظة: لن تجد هذا التغير إن قمت بترقية مشروعك إلى الإصدار 3.1 ولكن إن قمت بإنشاء مشروع جديد ستجد أن هذا التغير موجود في الملف settings.py

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

كلا السطرين يقوم بجلب مسار المجلد الحاوي على المجلد الأب (أي مستويين إلى الأعلى)

الفرق أن ()resolve ستقوم بمعالجة أي مسارات نسبية في المسار الممرر لها، وأيضا تقوم بمعالجة أي ذكر لوصلات رمزية Symbolic Links،

لكن في حالتك هذه أنت تمرر المتغير __file__ وبالتالي أنت لا تستفيد من هذه المزايا، بالتالي الحالتين متماثلتين لديك

# بفرض الملف الحالي
# /path/to/current/file.py

BASE_DIR = Path(__file__).resolve().parent.parent # /path/to

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # /path/to

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 ساعات قال سامح أشرف:

في الماضي كان جانغو Django يقوم بتخزين BASE_DIR في شكل نص عادي String لذلك كان يمكنك أن تقوم بإستخدام الكود التالي:
 


import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

وكان يمكنك أن تقوم بعمل المسارات من خلال الكود التالي:
 


os.path.join(BASE_DIR, ...)

لكن بداية من الإصدار 3.1 أصبح جانغو يحتاج إلى أن يكون المتغير BASE_DIR عبارة عن كائن Path لذلك يجب أن تستخدم الكود التالي:


from pathlib import Path

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

وأصبح يمكنك إنشاء المسارات من خلال الكود التالي:


BASE_DIR / 'subdir'

وبالتالي يكون عمل المسارت أمرًا أسهل بكثير من خلال الكود السابق.

ملاحظة: لن تجد هذا التغير إن قمت بترقية مشروعك إلى الإصدار 3.1 ولكن إن قمت بإنشاء مشروع جديد ستجد أن هذا التغير موجود في الملف settings.py

Django version 3.2.9, using settings 'project.settings'

وجهتني مشكلة اخرة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 19 دقائق مضت قال Haitham Owda2:

 

عليك تعديل الملف url.py ليحتوي على مسار فارغ، كالتالي:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('polls.urls'))	# عليك أن تقوم بتغير polls.urls إلى مسار الصفحة الرئيسية
]

أو إستخدام ملفات العرض views -إن كان لديك واحد-:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', main_views.homepage),	# عليك أن تقوم بتغير main_views.homepage إلى مسار الصفحة الرئيسية
]

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • -1
بتاريخ 2 ساعات قال سامح أشرف:

عليك تعديل الملف url.py ليحتوي على مسار فارغ، كالتالي:


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('polls.urls'))	# عليك أن تقوم بتغير polls.urls إلى مسار الصفحة الرئيسية
]

أو إستخدام ملفات العرض views -إن كان لديك واحد-:


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', main_views.homepage),	# عليك أن تقوم بتغير main_views.homepage إلى مسار الصفحة الرئيسية
]

 

 

2.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...