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

السؤال

نشر

لدي حقل في نموذج 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...