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

السؤال

نشر (معدل)

لدي نموذج form بسيط للغاية:

class SearchForm(Form):
    query = forms.CharField(label='search')

يتم عرض هذا النموذج في القالب template، بالشكل التالي:

<input type="text" name="query" id="id_query" />

الآن أرغب في إضافة خاصية placeholder إلى هذا الحقل بقيمة "Search"حتى يظهر كود HTML بالشكل التالي:

<input type="text" name="query" id="id_query" placeholder="Search" />

كما أرغب في تمرير قيمة الـ placeholder إلى CharField في هذا النموذج، على النحو التالي:

query = forms.CharField(label='search', placeholder='Search')

ما هي أفضل طريقة لتحقيق ذلك؟

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

Recommended Posts

  • 1
نشر

يمكنك أن تقوم بذلك من خلال :

query = forms.CharField(label = 'search', widget = forms.TextInput(attrs = {'placeholder': 'Search'}))

حيث تقبل widget كائن من نوع TextInput والذي بدوره يمكنك من الحصول على قيمة أي خاصية مثل placeholder على سبيل المثال.

والطريقة الأخرى لعمل نفس الشيء هي إستخدام صنف Meta، كالتالي:

from django import forms
from .models import SearchModel

class SearchForm(forms.ModelForm):
    class Meta:
        model = SearchModel
        widgets = {
            'name': forms.TextInput(attrs={'placeholder': 'Search'}),
        }

 

  • 0
نشر

إذا كنت تفضل عدم تحديد الحقل، على سبيل المثال لبعض الطرق الديناميكية، فيمكنك القيام بذلك كالتالي:

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or 'email@address.nl'

حل آخر من خلال تخصيص ال widget الافتراضي. إذا كنت تستخدم نفس ال widget الذي يستخدمه الحقل عادةً، فيمكنك ببساطة تخصيص ذلك بدلاً من إنشاء مثيل جديد:

class sf(forms.Form):  
    q = forms.CharField(label='Search')
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['q'].widget.attrs.update({'placeholder': 'Search'})

 

  • 0
نشر

يمكنك استخدام هذا الكود لإضافة placeholder لكل حقل TextInput في النموذج الخاص بك. سيتم أخذ نص placeholder من تسميات الحقول الخاصة بالنموذج الخاص بك

class PlaceholderDemoForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(PlaceholderDemoForm, self).__init__(*args, **kwargs)
        for field_name in self.fields:
            field = self.fields.get(field_name)  
            if field:
                if type(field.widget) in (forms.TextInput, forms.DateInput):
                    field.widget = forms.TextInput(attrs={'placeholder': field.label})

    class Meta:
        model = DemoModel

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...