使用Django get_absolute_url在模板中显示图像

时间:2016-05-23 05:33:15

标签: django django-templates

我尝试使用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(r'^entry/(?P<pk>\d+)/edit/$',views.UserUpdateView.as_view(), name='user_edit')

模板:

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

并且可以在模板中成功获取网址:

但如果我在

中再添加一个参数
return reverse("user_edit", kwargs={"pk": self.id, 'photo':self.photo})

我收到错误:

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/$']

出了什么问题?提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果您的<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <a class="action like">Like</a>设置配置正确,您可以使用MEDIA属性检索图像的相对路径,如下所示:

url

https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.fields.files.FieldFile.url

答案 1 :(得分:1)

您的网址格式不匹配:

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

应该是:

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

但我不会通过urlconf传递照片网址。你应该重新考虑你的应用程序设计。

由于您在上下文中有用户对象,因此您可以通过user.photo.url检索他的照片网址,然后无需在网址中传递照片。