程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Django表单未以HTML呈现

发布于2020-01-16 22:24     阅读(916)     评论(0)     点赞(17)     收藏(0)


认为**renders**

def codequestion(request, question_id):
    question = Question.objects.get(pk=question_id)
    return render(request, 'polls/codequestion.html', {'question': question})

提交时调用的视图

def codequestion_evaluate(request, question_id):
    form = CodeForm()
    print request.method
    if request.method == 'POST':
        form = CodeForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data        
            return HttpResponse("Your code is  %s" % data['solution'])
        else:
            return HttpResponse("not valid")    
   else:
        return HttpResponse("Error")

from django import forms

class CodeForm(forms.Form):
    solution = forms.CharField(widget=forms.Textarea)

模板

<form action="{% url 'codequestion_evaluate' question.id %}" method="post">
{% csrf_token %}
{{form.as_p}}   
<input type="submit" value="Submit" />
</form>

我没有在HTML页面中显示表单字段,我只能看到“提交”按钮。


解决方案


假定显示未填写表单的视图根本不会创建表单对象。它应该创建一个表单对象,并将其传递给模板,如下所示:

def codequestion(request, question_id):
    question = Question.objects.get(pk=question_id)
    form = CodeForm()
    return render(request, 'polls/codequestion.html', {'question': question, 'form': form})

但是更好的是,您应该遵循Django文档中描述的模式为此,您应该:

  1. 删除codequestion所有操作(显示未填写的表单,显示有错误的提交表单,处理正确提交的表单)将由单个视图处理。

  2. 配置您的网址路由,以便codequestion_evaluate视图处理显示未填写表格的页面。

  3. 进行更改codequestion_evaluate,使其遵循以下模式:

    def codequestion_evaluate(request, question_id):
        if request.method == 'POST':
            form = CodeForm(request.POST)
            if form.is_valid():
                # The form has been submitted and is valid
                # process the data and redirect to a "thank you" page
                data = form.cleaned_data
                return HttpResponseRedirect('/thanks/')
            else:
                # just display an empty form
                form = CodeForm()
        # you can optionally add 'question' if you need it in your template
        question = Question.objects.get(pk=question_id)
        return render(request, 'polls/codequestion.html', {'form': form, 'question': question})


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/226464/2f7c1db368070018d196/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)