2013-03-10 11 views
27

जब कोई उपयोगकर्ता मेरे ऐप के लिए पंजीकरण करता है। मुझे प्रोफ़ाइल पृष्ठ पर पहुंचने पर यह त्रुटि प्राप्त होती है।Django 'छवि' विशेषता में इसके साथ कोई फ़ाइल नहीं है

The 'image' attribute has no file associated with it. 
Exception Type: ValueError 
Error during template rendering 
In template C:\o\mysite\pet\templates\profile.html, error at line 6 
1 <h4>My Profile</h4> 
2 
3 {% if person %} 
4 <ul>   
5 <li>Name: {{ person.name }}</li> 
6 <br><img src="{{ person.image.url }}"> 
Traceback Switch back to interactive view 
File "C:\o\mysite\pet\views.py" in Profile 
71.  return render(request,'profile.html',{'board':board ,'person':person}) 

मुझे लगता है कि इस त्रुटि को इसलिए होता है क्योंकि मेरे टेम्पलेट एक छवि की आवश्यकता है और देखा वह सिर्फ वह एक छवि नहीं जोड़ सकते जब तक कि वह संपादित करें पृष्ठ पर जाएँ और एक पृष्ठ कहते हैं तो वह प्रोफाइल पेज पर पहुंच सकते हैं पंजीकृत।

मेरे profile.html

<h4>My Profile</h4> 

{% if person %} 
<ul>   
    <li>Name: {{ person.name }}</li> 
    <br><img src="{{ person.image.url }}"> 


</ul> 
{% endif %} 

मेरा प्रोफ़ाइल समारोह views.py

def Profile(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:LoginRequest')) 
    board = Board.objects.filter(user=request.user) 
    person = Person.objects.get(user=request.user) 
    return render(request,'profile.html',{'board':board ,'person':person}) 

पर मैं व्यक्ति वस्तु का एक उदाहरण 2 बनाने और एक साथ मेरे टेम्पलेट पर उन्हें अलग करके इस समाधान की कोशिश की अगर यह सफल नहीं हुआ।

<h4>My Profile</h4> 

{% if person %} 
<ul>   
    <li>Name: {{ person.name }}</li> 
</ul> 
{% endif %} 
{% if bob %} 
<ul>   
<br><img src="{{ bob.image.url }}"> 
</ul> 

प्रोफ़ाइल कार्य करने के लिए मेरे समाधान

def Profile(request): 
    if not request.user.is_authenticated(): 
     return HttpResponseRedirect(reverse('world:LoginRequest')) 
    board = Board.objects.filter(user=request.user) 
    person = Person.objects.get(user=request.user) 
    bob = Person.objects.get(user=request.user) 

    return render(request,'profile.html',{'board':board ,'person':person,'bob':bob}) 

मैं निर्मित टेम्पलेट टैग और फिल्टर मुझे लगता है कि एक समाधान यहाँ उपयोग करने के लिए है (और) टेम्पलेट के लिए प्रलेखन पढ़ रहा हूँ टैग लेकिन मैं इसे ठीक से उपयोग नहीं कर सकता।

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

मेरी मदद के लिए धन्यवाद

+1

असली समस्या यहां डीजे है एंगो * * मंद * निर्णय जब फाइल मौजूद नहीं है, तो त्रुटि को फेंकने का निर्णय, इसके बजाय इसे किसी को वापस नहीं करना चाहिए। – s29

उत्तर

35

bob और person एक ही वस्तु है,

person = Person.objects.get(user=request.user) 
bob = Person.objects.get(user=request.user) 

तो आप इसके लिए सिर्फ व्यक्ति उपयोग कर सकते हैं।

अपने टेम्पलेट में, जाँच image मौजूद हैं या पहले नहीं,

{% if person.image %} 
    <img src="{{ person.image.url }}"> 
{% endif %} 
45

बेहतर दृष्टिकोण है जो उल्लंघन नहीं होगा सूखी तरह मॉडल वर्ग के लिए एक सहायक विधि जोड़ने के लिए है:

@property 
def image_url(self): 
    if self.image and hasattr(self.image, 'url'): 
     return self.image.url 

और डिफ़ॉल्ट यूआरएल प्रदान करने के लिए default_if_none टेम्पलेट फ़िल्टर का उपयोग करें:

<img src="{{ object.image_url|default_if_none:'#' }}" /> 
संबंधित मुद्दे