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

كيفية الحصول على اسم الملف فقط من الحقل FileField في جانغو Django؟

Mohssen A Mohssen

السؤال

لدي حقل في نموذج model من نوع FileField. يرجع هذا الحقل كائنًا من النوع File ، والذي يحتوي على التابع name (يقوم بإرجاع مسار الملف من MEDIA_ROOT)

الآن أريد أن أقوم بإضافة تابع يقوم بإعادة اسم الملف فقط (filename.ext) وليس مساره بالكامل، لكي أستخدمه بالشكل التالي في القوالب:

{% for uploaded in all_uploads %}
  <tr>
    <td>File Name: {{uploaded.file.filename}}</td><!-- يجب أن يتم كتابة اسم الملف هنا -->
    <td>File Path: {{uploaded.file.name}}</td>
    <td>File Size: {{uploaded.file.size}}</td>
  </tr>
{% endfor %}

كيف أقوم بهذا الأمر؟

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

Recommended Posts

  • 1

للحصول على اسم الملف فقط في بايثون يُمكنك استخدام الدالة basename من الوحدة os على الشكل التالي:

>> import os
>> os.path.basename(file.name)

لإستعمال هذه الدالة في القوالب يلزم إنشاء تابع أو خاصية في النموذج واستدعائه في القالب:

class MyModel(models.Model):	
	file = models.FileField()
	...

    #أنشأنا الخاصية filename
	@property
	def filename(self):
		return os.path.basename(self.file.name)

بعدها نستخدمُه على الشكل التالي:

{% for uploaded in all_uploads %}
  <tr>
    <td>File Name: {{uploaded.filename}}</td><!-- لاحظ كيفية استعمال الخاصية -->
    <td>File Path: {{uploaded.file.name}}</td>
    <td>File Size: {{uploaded.file.size}}</td>
  </tr>
{% endfor %}

 

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

  • 1

قم بتعريق الدالة filename في النموذج الخاص بك كالأتي

import os

class File(models.Model):
    file = models.FileField()
    ...

    def filename(self):
        return os.path.basename(self.file.name)

وقم باستخدام الدالة كالأتي

{% for uploaded in all_uploads %}
  <tr>
    <td>File Name: {{uploaded.filename}}</td><!-- يجب أن يتم كتابة اسم الملف هنا -->
    <td>File Path: {{uploaded.file.name}}</td>
    <td>File Size: {{uploaded.file.size}}</td>
  </tr>
{% endfor %}

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...