0

我想呈現一個將上傳圖像的表單。但我沒有得到它。圖像上傳字段不能在Django中工作

這裏的models.py: 在forms.py

profile_picture = models.ImageField(_('profile picture'),upload_to="profile_pictures" , blank=True, null=True,default="static/images/person.jpg") 

: 在views.py

class UploadProfilePictureForm(forms.Form): 
    profile_picture=forms.ImageField(label='Select an Image') 

在urls.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)) 

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

沒有一些更具體的調試信息從你我不能完全確定你的意思是「沒有得到它」。

有些事情你可以嘗試:

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並確保實際上傳工作。

如果您對結果發表評論,我可以嘗試幫助縮小範圍。

+0

Actullay我沒有得到上傳,它應該在模板中呈現;在呈現表單之後,我可以嘗試使用cleared_data或form.is_valid()。 –

0

最有可能你的問題屬於settings.py中的錯誤設置。 這就是我在我的項目中所做的工作,嘗試複製它,並在管理員首先嚐試,如果它工作。至少我們會知道問題出在您的設置/模型還是視圖中。

創建路徑appdirectory/static/images,導致不確定Django是否在不存在的情況下創建它。

settings.py

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'。

models.py

Pic = models.ImageField(upload_to='images/WaterMeterPictures/', blank=False, null=False) 

一旦你的管理工作正常,表單生成應該直截了當。

0

豆你有枕頭安裝?

+0

是的,我安裝了枕頭 –

0

因爲您還沒有使用form.is_valid(),您的表單未被綁定,並且form.cleaned_data不存在。一旦你運行form.is_valid(),那麼你將有權訪問cleared_data。