Django返回if request.method语句false并返回空白模板
我试图为我的项目做一个简单的文件上传,但似乎有一个问题。因此,一旦用户登录,我尝试通过单击按钮上载文件,但结果是一个空白模板 下面是我在views.py中的上传功能:Django返回if request.method语句false并返回空白模板,django,file,templates,upload,Django,File,Templates,Upload,我试图为我的项目做一个简单的文件上传,但似乎有一个问题。因此,一旦用户登录,我尝试通过单击按钮上载文件,但结果是一个空白模板 下面是我在views.py中的上传功能: def model_form_upload(request): if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): form
def model_form_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('main:register')
else:
return render(request, 'main/model_form_upload.html', {'form': form})
else:
return render(request, 'main/user_panel.html')
在forms.py中初始化:
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ('description', 'document')
models.py中的类:
class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
document = models.FileField(upload_to='documents/')
uploaded_at = models.DateTimeField(auto_now_add=True)
以及网址:
url(r'^upload/$', views.model_form_upload, name='upload')
在model_form_upload.html中,我有以下内容:
{%extends'main/user_base.html%}
{%block content%}
{%csrf_令牌%}
{{form.as_p}}
上载
{%endblock%}
我试图通过单击一个按钮来渲染模板,结果如下所示:
<form method="POST" action="{% url 'main:upload' %}">
{% csrf_token %}
<input type="submit">
</form>
主要的问题是,经过一点检查和搜索,我发现它没有返回任何内容,主要是因为model_form_upload视图中的if request.method==“POST”语句返回False,因此它只呈现没有表单的模板。所以我真的不明白为什么它会返回false。您的视图只会处理表单,或者在POST请求时返回表单 但您通过单击链接向视图发出请求,这是一个GET请求,而不是POST请求 由于链接不能发出POST请求,因此您必须使用JS来执行此操作,或者您可以创建如下小表单:
<form method="POST" action="{% url 'main:upload' %}">
{% csrf_token %}
<input type="submit">
</form>
现在,您可以通过常规链接访问上传页面。谢谢您的回答,但这似乎没有改变任何事情,我仍然得到一个空白template@CatalinC你把代码放在哪个文件里了?我把它放在名为user_panel.html的模板里,我最初把上传按钮放在那里,并从那里返回另一个与上传form@CatalinC这是否意味着该模板中现在有两个按钮?您需要单击表单中的一个。表单需要enctype=multipart/form数据,就像另一个模板中的一样。@参见xyres对问题的更新。我以为你想点击按钮上传一个文件,原来的答案让你完成了一半,但你只想转到上传表单。然后问题是如何处理上传视图中的else。对这种视图的第一个请求始终是对空表单的获取,只有在单击“提交”后的第二个请求是帖子。你尝试过而不是按钮吗?我尝试过,似乎没有改变任何事情。不过,我错过了问题的关键,而@xyres已经发现了这一点。