11

模型.py:

class UserProfile(models.Model):

    photo = models.ImageField(upload_to = get_upload_file_name,
                              storage = OverwriteStorage(),
                              default = os.path.join(settings.STATIC_ROOT,'images','generic_profile_photo.jpg'),
                              height_field = 'photo_height',
                              width_field = 'photo_width')
    photo_height = models.PositiveIntegerField(blank = True, default = 0)
    photo_width = models.PositiveIntegerField(blank = True, default = 0)

视图.py:

def EditProfile(request):

    register_generator()
    source_file = UserProfile.objects.get(user = request.user).photo

    args = {}
    args.update(csrf(request))
    args.update({'source_file' : source_file})

在我的模板某处:

{% generateimage 'user_profile:thumbnail' source=source_file %}

我收到一个错误:UserProfile 匹配查询不存在。

在这一行:

source_file = UserProfile.objects.get(user = request.user).photo

问题是 ImageField 的默认属性不起作用。因此,该对象不是在我的模型中创建的。如何正确使用此属性?如果我省略此属性,则创建的对象没有错误。我需要传递绝对路径还是相对路径?我正在使用 django-imagekit 在显示之前调整图像大小:http: //django-imagekit.readthedocs.org/en/latest/

4

1 回答 1

15

如果不定义默认属性,图片上传是否成功?当我在自己的 django 项目中实现 ImageField 时,我没有使用默认属性。相反,我编写了这个方法来获取默认图像的路径:

def image_url(self):
"""
Returns the URL of the image associated with this Object.
If an image hasn't been uploaded yet, it returns a stock image

:returns: str -- the image url

"""
    if self.image and hasattr(self.image, 'url'):
        return self.image.url
    else:
        return '/static/images/sample.jpg'

然后在模板中,显示图像:

<img src="{{ MyObject.image_url }}" alt="MyObject's Image">

编辑:简单的例子

在views.py

def ExampleView(request):
    profile = UserProfile.objects.get(user = request.user)
    return render(request, 'ExampleTemplate.html', { 'MyObject' : profile } )

然后在模板中,包含代码

<img src="{{ MyObject.image_url }}" alt="MyObject's Image">

将显示图像。

同样对于错误“用户配置文件匹配查询不存在”。我假设您已经在 UserProfile 模型的某处定义了与 User 模型的外键关系,对吗?

于 2014-03-22T19:27:08.297 回答