2017-06-12 55 views
0

我见过类似的问题,但不能算出这个接收POST数据,我有上传的图片上的模型的程序:查看没有从图像上传页面

views.py:

def upload_pic(request): 
    if request.method == "POST": 
     image_form = ImageUploadForm(request.POST, request.FILES) 
     if image_form.is_valid(): 
      image_form.save() 
      return HttpResponse('success') 
    else: 
     return HttpResponse('fail') 
    return render(request, 'tracker/upload_pic.html', {"image_form": image_form}) 

模板:

{% load staticfiles %} 
<!DOCTYPE html> 
<html> 
<body> 
<form method="POST" enctype="multipart/form-data">{% csrf_token %} 
{{ image_form.img }} 
<input type="submit" value="submit" /> 
</form> 
</body> 
</html> 

urls.py:

urlpatterns = [ 
url(r'^upload_pic', views.upload_pic, name='upload_pic') 
] 

只是想保存到用户模式,所以我可以在以后找回它,但我不能访问任何POST数据,我也试着在HTML模板添加action = "{% url upload_pic %}"form,但我得到了NoReverseMatch错误

class ImageUploadForm(forms.ModelForm): 
    #model to store the information about the pictures 
    class Meta: 
     model = ExtendedProfile 
     exclude =() 
+2

请发布图片上传表格也 –

+2

一个错误我想指出'action =“{%url upload_pic%}”'这是不正确的。这'动作=“{%URL‘upload_pic’%}”'是正确的 –

+2

此外,该视图可以不承担责任摆在首位显示的形式,因为你只是显示为“失败”时,它是不是一个POST。所以你应该显示这样做的视图和URL,并解释为什么它们是分开的。 –

回答

2

您需要在表格上添加action所以它会检索URL名称。

<form action="{% url 'upload_pic' %}" method="POST" enctype="multipart/form-data">{% csrf_token %} 
    {{ image_form.img }} 
    <input type="submit" value="submit" /> 
</form> 

upload_pic忘了''

+1

完全的“良好做法尖”不同意 - 具有用于查看和URL名称不同的名称一定不要让事情变得更加“可读”,它只会增加一些无用的认知开销。 –

+0

@brunodesthuilliers这不是我认为的,当我知道我使用url的名称attr时,它更容易。 – Lindow

+0

我有这个巨大的项目中,没有一个URL名称相匹配的视图函数的名称,我可以告诉你,这是一个_major_ PITA维护。无论如何:关键在于,无论如何,你发现它“更具可读性”,这绝不意味着“良好实践”,只是你自己的偏好。 –