我有UserProfile模型,只要使用post_save信号创建User,我就会实例化一切,除了userprofile中的ImageField之外,一切正常。我正在使用django-allauth进行注册和登录。当我尝试访问任何用户的个人资料页面时,控制台会重复打印:
[28/Dec/2016 12:22:06] "GET /media/C%3A/Users/shagu/Desktop/zorion-develop/project_1
/media/profile/images/Users/shagu/Desktop/zorion-develop/project_1/media/profile/images/...
并说这是结束
../zorion-develop/project_1/media/profile/images/nobody.jpg HTTP/1.1" 302 0
[28/Dec/2016 12:24:26] code 414, message Request-URI Too Long
[28/Dec/2016 12:24:26] "" 414 -
配置文件模型如下:
class UserProfile(models.Model):
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
image = models.ImageField(width_field="width_field",
height_field="height_field",
upload_to=os.path.join(settings.MEDIA_ROOT,'media', 'profile','images'),
default = os.path.join(settings.MEDIA_ROOT,'media', 'profile','images', 'nobody.jpg'),
)
height_field = models.IntegerField(default=0)
width_field = models.IntegerField(default=0)
age = models.IntegerField(null=True, blank=True)
gender = models.CharField(
choices=(
('M', 'male'),
('F', 'female'),
),
default='M', max_length=1)
profile_confirmed = models.BooleanField(default=False)
与媒体相关的设置如下:
MEDIA_ROOT = os.path.join(os.path.dirname(PROJECT_ROOT))
MEDIA_URL = "/media/"
这就是我尝试访问模板中图像的方式:
<div align="center"><img alt="User Pic" src="{{ user.userprofile.image.url }}" id="profile-image1" class="img-circle img-responsive">
我是django的新手。请让我知道我搞砸了。
答案 0 :(得分:0)
完全理解并修复问题所需的信息少得多,但我可以给你一个可能会修复它的提示。
首先,您当前状态的MEDIA_ROOT指向项目之外,因为PROJECT_ROOT可能类似于'/ home / user / myproject',而MEDIA_ROOT将是'/ home / user'。无论如何,如果你真的想要的话,这很好。但实际上我会把它改为:
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
其次,在
中使用绝对路径upload_to=os.path.join(settings.MEDIA_ROOT,'media', 'profile','images')
实际上并不是一个好习惯。您应该使用相对路径,Django实际上将相对于MEDIA_ROOT和MEDIA_URL构建正确的路径(并在将来链接)。像这样:
upload_to=os.path.join('', 'profile','images')
在你做了假设的修复之后,为你的图像字段上传一个新的文件/图像,因为我认为Django已经以错误的方式在你的数据库中存储链接,并强烈建议进行干净的测试。