2013-03-10 30 views
27

Khi người dùng đăng ký ứng dụng của tôi.Tôi nhận được lỗi này khi đến trang hồ sơ.Django Thuộc tính 'hình ảnh' không có tệp nào được liên kết với nó

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}) 

Tôi nghĩ rằng lỗi này xảy ra bởi vì mẫu của tôi đòi hỏi phải có một hình ảnh và nhìn thấy ông chỉ đăng ký ông không thể thêm một hình ảnh trừ khi anh ta đi đến trang chỉnh sửa và bổ sung thêm một trang sau đó ông có thể truy cập vào trang profile.

profile.html My

<h4>My Profile</h4> 

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


</ul> 
{% endif %} 

Thông tin cá nhân chức năng tại 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}) 

tôi đã cố gắng giải pháp này bằng cách tạo ra một trường hợp 2 đối tượng Person và tách chúng ở mẫu của tôi với một nếu nó không thành công.

<h4>My Profile</h4> 

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

giải pháp của tôi để các hồ sơ chức năng

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}) 

Tôi đã đọc tài liệu cho Built-in mẫu thẻ và bộ lọc Tôi nghĩ rằng một giải pháp ở đây là sử dụng (và) mẫu nhưng tôi dường như không thể sử dụng nó đúng cách.

Làm cách nào tôi có thể định cấu hình mẫu này để làm cho hình ảnh trở thành một tùy chọn. Nếu họ không có hình ảnh rời khỏi nó nhưng hiển thị tên người.

Cảm ơn bạn vì đã giúp tôi

+1

Vấn đề thực sự ở đây là Dj ango * chậm phát triển * quyết định ném một lỗi khi các tập tin không tồn tại, thay vào đó nó sẽ chỉ trả về None. – s29

Trả lời

35

bobperson là cùng một đối tượng,

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

Vì vậy, bạn có thể sử dụng chỉ người cho nó.

Trong mẫu của bạn, kiểm tra image tồn tại hay không đầu tiên,

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

Cách tiếp cận tốt hơn mà sẽ không vi phạm DRY là thêm một phương pháp helper đến lớp mô hình như:

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

và sử dụng bộ lọc mẫu mặc định_if_none để cung cấp url mặc định:

<img src="{{ object.image_url|default_if_none:'#' }}" /> 
Các vấn đề liên quan