2013-03-10 15 views
27

ユーザーが自分のアプリケーションに登録すると、プロファイルページに移動したときにこのエラーが発生します。Django 'image'属性に関連付けられているファイルがありません

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

私はPersonオブジェクトの2のインスタンスを作成して、私のテンプレートでそれらを分離することによって、このソリューションを試してみました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}) 

でマイプロフィール機能それが成功しなかったならば。私はビルトインテンプレートタグやフィルタのマニュアルを読んできていますプロフィール機能への私のソリューション

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

<h4>My Profile</h4> 

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

私はここで解決策を使用することだと思います(と)テンプレートタグを使用することはできません。

画像をオプションにするにはどうすればこのテンプレートを設定できますか?彼らは写真がない場合はそれを残すが、人の名前を表示します。

だから、あなたはそれのためだけの人を使用することができます

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

+1

本当の問題はDjですangoの*遅らせる*ファイルが存在しないときにエラーをスローする決定、代わりに返す必要があります。 – s29

答えて

35

bobpersonが同じオブジェクトである私を助けてくれてありがとう。テンプレートで

、チェックimageはDRYに違反していないだろう、より良いアプローチは、モデルクラスのようにヘルパーメソッドを追加することです

{% 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テンプレートフィルタを使用してデフォルトのURLを提供する:

<img src="{{ object.image_url|default_if_none:'#' }}" />