【问题标题】:Displaying image in template with Django get_absolute_url使用 Django get_absolute_url 在模板中显示图像
【发布时间】:2016-05-23 05:33:15
【问题描述】:

我正在尝试使用 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 }}"/>

并且可以成功获取模板中的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/$']

怎么了?提前致谢。

【问题讨论】:

  • 您是否定义了一个名为"user_edit" 的url,它接受pkphoto 作为命名参数?如果您的原始实现仅适用于 pk,则 URL 只接受那么多。如果您还需要传递photo,那么您需要修改url 模式。请添加user_edit 的网址格式。
  • 网址模式存在,添加在上面
  • 它确实存在,但它只有一个命名参数pk 而不是photo。这就是您收到错误的原因。
  • 您希望通过在 url 中传递 photo 来实现什么?
  • 我想在页面上显示照片。请帮忙更新网址。

标签: django django-templates


【解决方案1】:

如果您的MEDIA 设置配置正确,您可以使用url 属性检索图像的相对路径,如下所示:

<img src="{{ userdata.photo.url }}"/>

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

【讨论】:

    【解决方案2】:

    您的网址格式不匹配:

    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 传递照片 url。您应该为此重新考虑您的应用程序设计。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多