2009-08-14 9 views
18

में ImageField के लिए डिफ़ॉल्ट छवि मेरे मॉडल पर प्रोफ़ाइल चित्रों को संग्रहीत करने के लिए मैं ImageField का उपयोग कर रहा हूं।Django के ORM

यदि कोई छवि परिभाषित नहीं की गई है तो मैं इसे डिफ़ॉल्ट छवि वापस करने के लिए कैसे सेट करूं?

उत्तर

3

आप अपने ध्यान में रखते हुए इस कोशिश कर सकते:

{% ifequal object.image None %} 
    <img src="DEFAULT_IMAGE" /> 
{% else %} 
    display image 
{% endifequal %} 
+12

{% अगर obj.image%} प्रदर्शन {% else%} {% endif%} - सभी {% ifequal%} टैग जलाएं !! – SmileyChris

+0

यह वही है जो मैं कर रहा हूं, लेकिन यह कोड डुप्लिकेट कर रहा है, नहीं? – Yuvi

+1

यदि आपको अपने सभी विचारों में इसकी आवश्यकता है तो आप एक का उपयोग कर सकते हैं, आप इसे show_obj_image.html कह सकते हैं, फिर {% शामिल करें "show_obj_image.html"%} – imjoevasquez

25

मैं इस प्रयास नहीं किया है, लेकिन मैं अपेक्षाकृत सुनिश्चित करें कि आप सिर्फ अपने क्षेत्र में एक डिफ़ॉल्ट के रूप में सेट कर सकते हैं।

pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg') 

संपादित: बेवकूफ StackOverflow मुझे अन्य लोगों के जवाब पर टिप्पणी नहीं दूँगा, लेकिन उस वर्ष का टुकड़ा नहीं है तुम क्या चाहते। मैं अत्यधिक django-imagekit की अनुशंसा करता हूं क्योंकि यह बहुत अच्छी छवि आकार बदलने और मैनिपुलेशन सामग्री को बहुत आसानी से और साफ करता है।

+0

उस लिंक के लिए धन्यवाद - ऐसा लगता है कि मैं उस का उपयोग करूँगा सड़क काफी थोड़ी सी है। – Yuvi

+0

@ericflo: हाँ, स्टैक ओवरफ्लो आपको तब तक टिप्पणी छोड़ने नहीं देता जब तक आपके पास 50 प्रतिष्ठा न हो, जो कि परेशान है। – Powerlord

+4

असल में यह काम करता है। यद्यपि शायद आदर्श नहीं है ... यह 'डिफ़ॉल्ट' से अधिक 'प्रारंभिक' जैसा व्यवहार करता है क्योंकि यह इसे सृजन पर डिफ़ॉल्ट मान पर सेट करता है, लेकिन यदि आप छवि को हटाते हैं तो यह मान को आपके डिफ़ॉल्ट पर वापस सेट नहीं करता है। तो हो सकता है कि आप उस डिफ़ॉल्ट मान को निरंतर किसी स्थान के रूप में स्थापित करना चाहें और हटाएं पर इसे मैन्युअल रूप से सेट कर दें। –

7

आप सैद्धांतिक रूप से अपनी मॉडल परिभाषा के भीतर एक फ़ंक्शन का भी उपयोग कर सकते हैं। लेकिन मैं जानता हूँ कि यह अच्छा अभ्यास है कि क्या न:

class Image(model.Models): 
    image = .... 

    def getImage(self): 
     if not self.image: 
      # depending on your template 
      return default_path or default_image_object 

और फिर एक टेम्पलेट

<img src="img.getImage" /> 

यह आपको भविष्य के लिए लचीलापन के एक महान सौदा देता है भीतर ...

मैं बड़ी सफलता के साथ थंबनेल पीढ़ी के लिए सॉर्ल का उपयोग

+2

Django पहले से ही इस उद्देश्य के लिए url() विधि प्रदान करता है: shanyu

+2

सच है, लेकिन वह एक डिफ़ॉल्ट यूआरएल आपूर्ति करने में सक्षम नहीं होगा। आप एक डिफ़ॉल्ट यूआरएल के साथ कस्टम 'छविफिल्ल्ड' कक्षा बना सकते हैं जो छवि मान कोई नहीं होने पर वापस लौटाया जाता है। –

0

आप 'डिफ़ॉल्ट' पैरामीटर के साथ प्रारंभिक मान प्रदान कर सकते हैं। यदि पहले से ही एक छवि है और आप इसे डिफ़ॉल्ट (को हटाने के बजाय) निर्धारित करना चाहते हैं, तो आप कुछ इस तरह की कोशिश कर सकते हैं:

DEFAULT = 'img/default.jpg' 

class Example(models.Model): 
    image = models.ImageField(default=DEFAULT) 

    def set_image_to_default(self): 
     self.image.delete(save=False) # delete old image file 
     self.image = DEFAULT 
     self.save() 

तो फिर तुम set_image_to_default() बजाय image.delete() का उपयोग कर सकते हैं, यदि आप डिफ़ॉल्ट पसंद करते हैं ।

0

अपनी छवि क्षेत्र में

field = models.ImageField(upload_to='xyz',default='default.jpg') 

नोट: पथ MEDIA_ROOT अंदर होना चाहिए।

संबंधित मुद्दे