我尝试使用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/$']
出了什么问题?提前谢谢。
答案 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
检索他的照片网址,然后无需在网址中传递照片。