我正在尝试为Django用户上传个人资料图片,但它不起作用,其他字段(网站)工作得很好。我尝试了几种解决方案,但我找不到任何对我有用的解决方案。我不知道出了什么问题,我只是Django的新手。我希望你能帮助我。
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
website = models.URLField(blank=True)
picture = models.ImageField(upload_to='profile_images', blank=True)
def __unicode__(self):
return self.user.username
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
views.py
@login_required
def edit_profile(request):
context = RequestContext(request)
if request.method == "POST":
form = UserProfileForm(request.POST,request.FILES, instance=request.user.profile)
if form.is_valid():
form.save()
return HttpResponseRedirect('/rango/profile/')
else:
user = request.user
profile = user.profile
form = UserProfileForm(instance=profile)
return render_to_response('rango/profile_registration.html', {'form':form}, context)
答案 0 :(得分:1)
确保您已在设置中设置了MEDIA_ROOT,如下所示
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/media/'
还要确保首先创建了MEDIA_ROOT目录。希望它有所帮助。
答案 1 :(得分:0)
您是否在Django项目的根路径中创建了一个“media”文件夹?
以下是有关Django中静态文件的一些信息:Django-static-files
在我的一个项目中,我在settings.py中有以下条目
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
我还在项目根目录中创建了两个foldes。
否则,如果这不起作用,请提供有关错误日志的更多信息。
答案 2 :(得分:0)
在您希望用户上传图片的表单中加入enctype="multipart/form-data"
。
<form class="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_table}}
<input type="submit" name="" value="submit">
</form>
&#13;
我也有与你相同的要求,这有帮助。