【问题标题】:Django Forms vs TemplatesDjango 表单与模板
【发布时间】:2015-04-17 02:57:00
【问题描述】:

很抱歉给您带来不便,但我是 Django 的新手。我想如果我使用 forms.py Django 会为我创建表单,我不需要在模板上创建输入标签,所以我只创建了一个测试模板,因为我创建了 forms.py。但是,运行我的代码时,我被告知我的视图没有返回 HttpResponse 对象,我怀疑这是因为我的模板上只有文本。你能帮我创建一个模板让我的表格正常工作吗?我们可以使用上面发布的示例。我将它粘贴在下面:

def create_post(request):
    if request.method == 'POST':
        form = CreatePostForm(request.POST)
        if form.is_valid():
            my_model = form.save()
            return redirect('/posts/')
        else:
            form = CreatePostForm()
        c = {'form' : form}
        return render(request,'create_post.html',c)

【问题讨论】:

  • 您的示例代码没有正确缩进,templtate.html 中有错字并且您没有解析模板。在提问之前阅读 Django 文档。
  • 你能把打印语句放在每个“if”“else”语句的结尾之前吗?我认为您的表单验证失败

标签: python django forms templates


【解决方案1】:

您应该返回render() 而不是HttpResponse

from django.shortcuts import render

def create_a_my_model(request):
    ...
    return render(request, 'template.html', c)

template.html 可以很原始:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button>Save</button>
</form>

另请注意,好的做法是在发布请求后重定向到某个页面。这将防止双重提交。因此,您的视图的整个代码将是:

from django.shortcuts import redirect, render

def create_a_my_model(request):
    if request.method == 'POST':
        form = MyModelForm(request.POST)
        if form.is_valid():
            my_model = form.save()
            return redirect(my_model) # if the model has `get_absolute_url()`
    else:        
        form = MyModelForm()
    return render(request, 'template.html', {'form': form})

如果您的模型没有get_absolute_url() 方法,您可以重定向到任何其他网址:return redirect('/success/page/')

【讨论】:

  • 非常感谢您的帮助,但我仍然遇到同样的错误。这就是我的错误:异常值:视图 blogapp.views.create_post 没有返回 HttpResponse 对象。它返回 None 。
  • 我将 HttpResponse 替换为:return render(request,'create_post.html',c)
  • 编辑您的问题并复制粘贴create_post() 视图的代码。可能存在缩进问题,所以我需要查看您运行的确切代码。
  • 我猜对了——这是错误的缩进。 else 部分和下面的代码应该移到左边一层。比较你的代码和我的代码。您的版本没有返回任何内容,然后是 request.method == 'GET'
  • 非常感谢您的帮助,我知道关注那些非常基本的问题和愚蠢的错误一定很糟糕,但我非常感谢您对我的问题的关注。固定
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 2013-10-10
  • 2012-01-09
  • 2010-11-11
  • 2017-05-02
  • 2015-12-11
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多