2016-05-23 18 views
0

get_absolute_urlモデルメソッドでテンプレートに画像を表示しようとしています。Djangoでテンプレートに画像を表示するget_absolute_url

モデル:

class UserData(models.Model): 
    ...... 
    photo = models.ImageField(upload_to = 'photo/', blank=True) 
    def __unicode__(self): 
     return '%s%s' %(self.last_name, self.photo) 

    def get_absolute_url(self): 
     return reverse("user_edit", kwargs={"pk": self.id) 

のURL:

url(r'^entry/(?P<pk>\d+)/edit/$',views.UserUpdateView.as_view(), name='user_edit') 

テンプレート:

<img src="{{ userdata.get_absolute_url }}"/> 

と首尾ように、テンプレート内のURLを取得することができます:

が、私は追加した場合

return reverse("user_edit", kwargs={"pk": self.id, 'photo':self.photo}) 

の1つの以上の引数が、私はエラーが表示されます。

NoReverseMatch at /entry/1/edit/ 
Reverse for 'user_edit' with arguments '()' and keyword arguments '{'pk': 1,'photo': <ImageFieldFile: photo/_IGP7076.jpg>}' not found. 1 pattern(s) tried: ['entry/(?P<pk>\\d+)/edit/$'] 

間違っているのですか?前もって感謝します。

+0

あなたは '「user_edit」'という名前のURLを定義しています名前付きパラメータとして 'pk'と' photo'の両方を受け入れますか?元の実装が 'pk'のみで動作する場合、URLはそれを多く受け取ります。 '写真 'を渡す必要がある場合は、URLパターンを変更する必要があります。 'user_edit'のURLパターンを追加してください。 – AKS

+0

URLパターンが存在し、上に追加されました。 – Andriy

+0

存在しますが、 '写真 'ではなく、' pk'という名前のパラメータしかありません。だからあなたはエラーを受けている。 – AKS

答えて

1

あなたのURLパターンが一致しません:

url(r'^entry/(?P<pk>\d+)/(?P<photo>[^\/]*)/edit/$',views.UserUpdateView.as_view(), name='user_edit') 

けど、URLconfのを経由して写真のURLを渡しません:

url(r'^entry/(?P<pk>\d+)/edit/$',views.UserUpdateView.as_view(), name='user_edit') 

はする必要があります。あなたはこれのためにあなたのアプリデザインを考え直すべきです。

あなたのコンテキストにユーザーオブジェクトがあるので、user.photo.urlで写真のURLを取得すると、URLに写真を渡す必要はありません。

関連する問題