Django返回if request.method语句false并返回空白模板

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

我试图为我的项目做一个简单的文件上传,但似乎有一个问题。因此,一旦用户登录,我尝试通过单击按钮上载文件,但结果是一个空白模板

下面是我在views.py中的上传功能:

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已经发现了这一点。