【问题标题】:Django Value Error "The view capstone.views.home didn't return an HttpResponse object. It returned None instead."Django 值错误“视图 capstone.views.home 没有返回 HttpResponse 对象。它返回了 None。”
【发布时间】:2021-07-01 04:42:30
【问题描述】:

我正在获取用户放入表单的数据并将其保存到 Django 中的数据库中。当我提交表单时,该值实际上确实保存到了数据库中。但我不断收到这个错误。不知道如何解决?

views.py

def home(request):
    if request.method == "GET":
        form_for_post = {'form': PostForm()}
        return render(request, "capstone/home2.html", form_for_post)
    else: 
        if request.method == "POST":
            form = PostForm(request.POST)

        if form.is_valid():
            city = form.cleaned_data['city']
            place = Location.objects.create(username=request.user, city=city,)
            place.save()
        else:
            return render(request, "capstone/home2.html")

models.py

class User(AbstractUser):
    pass

class Location(models.Model):
    city = models.CharField(max_length=500) 
    username = models.ForeignKey('User', on_delete=models.CASCADE, 
    related_name='author', null=True, blank=True)

forms.py:

class PostForm(forms.Form):
    city = forms.CharField(max_length=500)

html 格式:

<form method="POST">
    {% csrf_token %}

    <label for="city">City:</label><br>
    <input type="text" id="city" name="city"><br>

    <input type="submit" value="Submit">
  </form> 
    

【问题讨论】:

  • if form.is_valid(): 这个 if 子句,如果满足的话,会导致视图不返回任何东西。看来你不需要else

标签: django django-models django-views django-forms


【解决方案1】:

默认情况下,如果发出请求,它将是一个获取请求,因此不需要添加if request.method == 'GET' 就这样吧

def home(request):
    form_for_post = {'form': PostForm()}
    if request.method == "POST":
       form = PostForm(request.POST)
       if form.is_valid():
          city = form.cleaned_data['city']
          place = Location.objects.create(username=request.user, city=city,)
          place.save()
          return render(request,"your_page_after_form_successfully_submited")
    return render(request, "capstone/home2.html",form_for_post)

【讨论】:

    【解决方案2】:
    def home(request):
        if request.method == "POST":
            form = PostForm(request.POST)
            if form.is_valid():
                city = form.cleaned_data['city']
                place = Location.objects.create(username=request.user, city=city,)
                place.save()
            else:
                return render(request, "capstone/home2.html",form)
        form_for_post = {'form': PostForm()}
        return render(request, "capstone/home2.html", form_for_post)
    

    试试这个

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 2021-09-01
      • 1970-01-01
      • 2023-03-17
      • 2017-01-25
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多