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

السؤال

نشر

لدي النص التالي مخزن في قاعدة البيانات:

<img src="https://via.placeholder.com/150" />

وأريد أن يتم تحويله إلى الكود التالي ليتم عرضه كصورة في المتصفح:

<img src="https://via.placeholder.com/150" />

كيف يمكن القيام بهذا الأمر في جانغو Django؟

Recommended Posts

  • 1
نشر

علي اي حال يمكن استخدام التعابير القياسية او المنطقية في بايثون ,

ساطرح طريقتين الأولي تعتمد علي السطر الذي ارفقته اعلاه ,

دعنا في البداية نتفق علي ان ما يهمنا من هذا النص هو url الصورة والذي نود الحصول عليه ودمجه في كود html عادي.[إذا كان يهمك شئ اخر غير url في النص ارجو اخطاري ادناه]

ولنفرض مبدئيا أن لديك قائمة او list من تلك النصوص .

الطريقة الأولي للحل هي البحث عن http او https ضمن السطر , استخدام دالة string.find او rfind ستساعدنا علي معرفة مكان بداية رابط الصورة او url كرقم مجرد.

ثم نعيد البحث عن "&quot;" والتي نعتبرها نهاية وسم url او رابط الصورة. يمكننا الحصول علي url عند حصر هذا النطاق. كما يلي

it = "&lt;img src=&quot;http://via.placeholder.com/150&quot; /&gt;"
start = it.find('https') if it.find('https')>-1 else it.find('http') 
end   = it.rfind('&quot;') 
url = it[start:end]
print(url)

'''```output:http://via.placeholder.com/150```'''

ثم يمكننا اضافة url الي وسم html بسهولة,

res = f'<img src="{url}" />'

print(res)

'''Output:<img src="http://via.placeholder.com/150" />'''

ولتطويرها اليك الكود الكامل:

p_list = ["&lt;img src=&quot;http://via.placeholder.com/150&quot; /&gt;", "&lt;img src=&quot;https://via.placeholder.com/image.jpg; /&gt;"]


def conv_html(url):
    return f'<img src="{url}" />'

def proc_dec1(p_list):
    result = []
    for it in p_list:
        if 'img' in it:
          start = it.find('https') if it.find('https')>-1 else it.find('http') 
          end   = it[start:].rfind('.jpg')+4 if it[start:].rfind('.jpg')>-1 else it[start:].rfind('&quot;') 
          step_one = it[start:start+end]
          step_two = conv_html(step_one)
          result.append(step_two)
    return result

result = proc_dec1(p_list)
print(result)

'''Output:['<img src="http://via.placeholder.com/150" />',
 '<img src="https://via.placeholder.com/image.jpg" />']'''

 

لقد اضفت .jpg علي سبيل المثال ويمكنك التخصيص اكثر اذا كانت بياناتك تتضمن انماطاً مختلفة,

اما الطريقة الثانية ,وهي استخدام تعابير re للبحث عن url داخل النص, اليك المثال التالي,

import re

p_list = ["<img src="http://via.placeholder.com/150" />", "<img src="https://via.placeholder.com/image.jpg; />"]

def conv_html(url):
    return f'<img src="{url}" />'

def proc_dec2(p_list):
    result = []
    for it in p_list:
        step_one = re.search("(?P<url>https?://[^\s]+)", it).group("url") 
        step_two = step_one.replace(';','')
        out = conv_html(step_two)
        result.append(out)
    return result

result = proc_dec2(p_list)
print(result)

'''Output:['<img src="http://via.placeholder.com/150&quot" />',
 '<img src="https://via.placeholder.com/image.jpg" />']'''

ربما تكون re اكثر مرونة عن الطريقة الأولي وهي البحث بشكل شبه مخصص عن url في داخل اي string او سلسلة نصية, وماتزال هناك طرق اخري , برغم جودة هؤلاء وفعاليتهم, لكن اعود لسؤالي الأول هل بيانات تحوي انماطا مختلفة؟؟ اذا كان الامر كذلك ارجو اخطاري وسأقوم بمناقشة الأمر معكم..

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...