2017-09-08 2 views
0

ユーザーが登録を完了した後、すべてのユーザーのプロフィール画像を表示する際に問題が発生します。 /media/profile_picturesフォルダーへのアップロード後に画像が保存されているのがわかりますが、その画像をホームページに表示する方法が見つかりません。登録してアップロードした画像をホームページに表示するには?

コードサンプルをご覧ください。私は写真をアップロードするためにDjangoチュートリアルでTangoをフォローしていましたが、ここで見つけたこの問題に関連する質問は実際には役に立たなかった。

forms.py

class UserForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput()) 

    class Meta: 
    model = User 
    fields = ('username', 'email', 'password') 

class UserProfileForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ('website', 'picture') 

views.py

def register(request): 
    context = RequestContext(request) 
    registered = False 

    if request.method == 'POST': 

    user_form = UserForm(data=request.POST) 
    profile_form = UserProfileForm(data=request.POST) 

    if user_form.is_valid() and profile_form.is_valid(): 
     user = user_form.save() 
     user.set_password(user.password) 
     user.save() 

     profile = profile_form.save(commit=False) 
     profile.user = user 

     if 'picture' in request.FILES: 
      profile.picture = request.FILES['picture'] 

     profile.save() 

     registered = True 

    else: 
     print (user_form.errors, profile_form.errors) 

else: 
    user_form = UserForm() 
    profile_form = UserProfileForm() 

return render(request,'webapp/register.html', {'user_form': user_form, 'profile_form': profile_form, 'registered': registered}) 
models.py

 class UserProfile(models.Model): 
     user = models.OneToOneField(User) 
     website = models.URLField(blank=True) 
     picture = models.ImageField(upload_to='profile_images', blank=True) 

     def __unicode__(self): 
      return self.user.username 

settings.py

 MEDIA_URL = '/media/profile_images/' 
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

home.html

<img src="{{ user.UserProfile.picture.url }}" width="240"> 

そしてurls.pyに私はあなたがUserProfileを小文字た場合、私はそれが動作すると思います

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
+0

私はそれを修正しました。申し訳ありませんが、私はこれでかなり新しいです:) – alex

答えて

1

を追加しました:

<img src="{{ user.userprofile.picture.url }}" width="240"> 

documentation for OneToOneField says

OneToOneFieldrelated_name引数を指定しないと、Djangoは現在のモデルの小文字の名前をデフォルト値として使用します。

関連する問題