2009-07-15 10 views
15

अंदर के बजाय पाठ क्षेत्र के रूप में एक मूल्य के प्रतिपादन वहाँ Django प्रस्तुत करना बनाने के लिए एक आसान तरीका है {{myform.name}} रूपएक Django फार्म

John Smith 

बजाय

<input id="id_name" name="name" value="John Smith" /> 
<form> टैग के अंदर

? या क्या मैं इस बारे में गलत तरीके से जा रहा हूं?

उत्तर

21
<form> 
    {% for field in form %} 
      {{ field.label }}: {{ field.value }} 
    {% endfor %} 
</form> 

एक नज़र यहाँ ले लो Form fields और Working with forms

+0

धन्यवाद - मैं .label लेकिन .initial नहीं देखा था:

आप यह भी की तरह कुछ कर सकते हैं। उत्सुकता से, प्रारंभिक "फॉर्म के साथ काम करना" दस्तावेज़ में भी उल्लेख नहीं किया गया है। – ine

+0

। प्रारंभिक केवल फॉर्म प्रस्तुत होने पर पहली बार काम करता है, है ना? उदाहरण के लिए, यदि त्रुटियां हैं और आप फॉर्म को दोबारा पेश करते हैं, तो मेरे अनुभव में कोई प्रारंभिक नहीं होगा। – dfrankow

+0

Django शब्दावली में, यह केवल अनबाउंड रूपों के साथ काम करता है। क्या होगा यदि आप इसे अनबाउंड और बाध्य दोनों रूपों के साथ काम करना चाहते हैं? – dfrankow

3

तुम भी एक नया विजेट का उपयोग कर सकते हैं: मैं ऐसा किया तो यह है कि मैं एक विजेट है कि एक तारीख के एक पाठ प्रदर्शन बनाया है, और साथ एक गुप्त फ़ॉर्म हो सकता था इसमें एक ही तारीख है, इसलिए यह उपयोगकर्ता को दिखाई दे सकता है, लेकिन वे इसे बदल नहीं सकते हैं।

class DayLabelWidget(forms.Widget): 
    def render(self, name, value, attrs): 
     final_attrs = self.build_attrs(attrs, name=name) 
     if hasattr(self, 'initial'): 
      value = self.initial 
     if type(value) == type(u''): 
      value = datetime.date(*map(int, value.split('-'))) 
     return mark_safe(
      "%s" % value.strftime("%A (%d %b %Y)") 
     ) + mark_safe(
      "<input type='hidden' name='%s' value='%s' />" % (
       name, value 
      ) 
     ) 

    def _has_changed(self, initial, data): 
     return False 

फिर आप (widget=DayLabelWidget,) के रूप में क्षेत्र में इस का उपयोग करें:

यहाँ (अभी भी परीक्षण/साफ किया जा करने के लिए) संस्करण एक प्रारंभिक है।

5

इसके अलावा, भूल नहीं है आप भी {{myform.instance.name}}

+0

यह क्या है? यह कहां दस्तावेज है? – dfrankow

+0

form.instance ऑब्जेक्ट देता है कि बाध्य रूप का प्रतिनिधित्व किया जा रहा है। यह यहां दस्तावेज़ों में है: http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean- विधि मुझे यह भी जिक्र करना चाहिए कि यह केवल मॉडलफॉर्म के साथ काम करता है – priestc

+0

आह, Google ऐप इंजन ModelForm का समर्थन नहीं करता है, इसलिए हम फॉर्म का उपयोग कर रहे हैं। – dfrankow

2

कर सकते हैं का उपयोग क्यों नहीं {{field.data}}?

+0

क्योंकि यह टेम्पलेट में नहीं देखे जाने वाले विचारों में किया जाना चाहिए (टेम्पलेट में लूप है) –

11

पुराना विषय समझौता है, लेकिन मुझे लगता है कि कुछ लोगों को अभी भी यहाँ आता है। अपने रूप में

from django.utils.safestring import mark_safe 

class PlainTextWidget(forms.Widget): 
    def render(self, _name, value, _attrs): 
     return mark_safe(value) if value is not None else '-' 

और

class SomeForm(Form): 
    somename = forms.CharField(widget=PlainTextWidget) 
संबंधित मुद्दे