我正在尝试渲染一个将上传图片的表单。但我没有得到它。
这里是models.py:
profile_picture = models.ImageField(_('profile picture'),upload_to="profile_pictures" , blank=True, null=True,default="static/images/person.jpg")
forms.py中的:
class UploadProfilePictureForm(forms.Form):
profile_picture=forms.ImageField(label='Select an Image')
在views.py中:
def add_profile_picture(request):
if request.method=='POST':
form=UploadProfilePictureForm(request.POST,request.FILES)
p=FearUser(profile_picture=request.FILES['profile_picture'])
p.save()
return HttpResponseRedirect(reverse('profile:my_profile'))
else:
form=UploadProfilePictureForm
return render_to_response('partials/_add_profile_picture.html',{'form':form},context_instance=RequestContext(request))
在urls.py中:
url(r'^profile/update-pp/$','profiles.views.add_profile_picture',name='pp_update')
最后在_add_profile_picture.html:
<form action="{% url 'profile:pp_update' %}" role="form" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.profile_picture.label_suffix }}</p>
<p>
{{ form.profile_picture.error_messages }}
{{ form.profile_picture }}
</p>
<div class="text-right">
<button type="button" class="btn btn-default custom_btn cancel_btn"
style="padding:5px 20px" data-dismiss="modal">Cancel
</button>
<button type="submit" class="btn btn-default custom_btn submit_btn"
style="padding:5px 20px">Submit
</button>
</div>
</form>
有谁能解释一下我做错了什么?
答案 0 :(得分:0)
如果没有您的某些更具体的调试信息,我无法完全确定您的意思&#34;没有得到它&#34;。
你可能会尝试一些事情:
1)实际验证表格(良好做法)。
2)从经过验证的表格中提取图像。 (也是很好的做法)。
if form.is_valid():
form = UploadProfilePictureForm(request.POST, request.FILES)
p = FearUser(profile_picture=form.cleaned_data['profile_picture'])
p.save()
为了帮助调试任何实际的图片上传问题,请在save
之后输入一份打印声明:
print p.profile_picture.url
并查看输出结果。如果它没有,或者不是你所期望的,那么你的储蓄就不对了。
您还可以print request.FILES
并确保实际上传工作正常。
如果您对结果发表评论,我可以尝试帮助缩小范围。
答案 1 :(得分:0)
您的问题很可能属于settings.py中的错误设置。 这就是我在我的项目中所拥有的,它正在工作,尝试复制它,并且如果它正在工作则首先尝试管理员。至少我们会知道问题是在您的设置/模型中还是在您的视图中。
创建路径appdirectory / static / images,导致不确定Django是否正在创建它以防不存在。
PROJECT_ROOT = path.dirname(path.abspath(path.dirname(__file__)))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = path.join(PROJECT_ROOT, 'static').replace('\\', '/')
STATIC_URL = '/static/'
STATICFILES_DIRS = ()
在已安装的应用中添加'django.contrib.staticfiles'。
Pic = models.ImageField(upload_to='images/WaterMeterPictures/', blank=False, null=False)
一旦管理员工作正常,表单生成应该是直截了当的。
答案 2 :(得分:0)
你有 Pillow 吗?
答案 3 :(得分:0)
由于您还没有使用form.is_valid(),因此您的表单未绑定且form.cleaned_data不存在。一旦运行form.is_valid(),您就可以访问cleaning_data。
答案 4 :(得分:0)
@login_required
def createPost(request):
if request.method == 'POST':
form = PostForm(request.POST,request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
return HttpResponseRedirect(reverse('Posts:post_detail', kwargs={'slug': post.slug}))
form = PostForm()
return render(request,'Posts/post_form.html',context={'key': form})
models.py
class Post(models.Model):
user = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True)
message = models.TextField()
img = models.ImageField(upload_to="photo/%Y/%m/%d", blank=True)
post_title = models.CharField(max_length=80, blank=False)
slug = models.SlugField(allow_unicode=True, unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.post_title)
super().save(*args, **kwargs)
def __str__(self):
return self.post_title
# def get_absolute_url(self):
# return reverse('home')
def get_absolute_url(self):
return reverse('Posts:post_detail', kwargs={'slug': self.slug})
class Meta:
ordering = ['-created_at']