首页 > 解决方案 > Django:提交表单后如何呈现相同的网页

问题描述

我有一个带有提交按钮的 index.html 文件。我想要这样的功能,当我单击提交按钮时,python 函数应该在后台被调用,但 index.html 的渲染视图应该保持不变。现在,每次我单击提交按钮时,都会加载一个新的 index.html 副本。这是我的代码

索引.html

<form action = "submit" method = "post">
     <p>latitude <input type = "text" id = "Latbox" name = "Latbox" /></p>
     <p>Longitdue <input type = "text" id = "Lonbox" name = "Lonbox" /b></p>
     <p><input type = "submit" value = "submit" /></p>
</form>

我的views.py 文件如下:

from django.shortcuts import render 
from django.views.generic import TemplateView

class HomePageView(TemplateView):
   def get(self, request, **kwargs):
     return render(request, 'index.html', context=None)


def submit(request):
  LAT=request.POST['Latbox']
  LON= request.POST['Lonbox']
  print (LAT, LON)
  return render(request,'index.html',context=None)  

我是 Django 的新手。我能得到一些关于如何解决这个问题的指示或答案吗?

标签: djangodjango-modelsdjango-formsdjango-viewsrender

解决方案


使用相同的视图来执行这两个操作。

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <p><input type = "submit" value = "submit" /></p>
</form>

在forms.py:

class LocationForm(forms.Form):
    latitude = form.CharField()
    longitude = form.CharField()

然后在views.py你做这样的事情:

class HomePageView(TemplateView):
    template_name = "index.html"

    def get(self, request, **kwargs):
        form = LocationForm()
        return render(request, self.template_name, {"form": form})

    def post(self, request, **kwargs):
        form = LocationForm(request.POST)
        if form.is_valid():
            pass  # do something with form.cleaned_data
        return render(request, self.template_name, {"form": form})

教程中并未完全涵盖它,但请看一下表单通用视图


推荐阅读