【问题标题】:Django: how to render same webpage after submit formDjango:提交表单后如何呈现相同的网页
【发布时间】:2018-11-17 18:01:33
【问题描述】:

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

index.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 的新手。我能得到一些关于如何解决这个问题的指示或答案吗?

【问题讨论】:

  • index.html 应该保持不变。 表示保持用户填写的所有表单值?
  • @Lemayzeur 是的。应该说一样。我只想向我的 python 函数发送大量提交,但渲染应该保持不变。
  • 这需要 JavaScript。这是使用 jQuery 的一种简单方法:api.jquery.com/jquery.ajax

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


【解决方案1】:

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

<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})

tutorial 中并未完全涵盖,但请查看 formsgeneric views

【讨论】:

  • 之前我的 url 文件是 '''urlpatterns = [ url(r'^$', views.HomePageView.as_view()), url(r'^submit', views.submit) ]' ''。现在我把它改成了 urlpatterns = [ url(r'^$', views.HomePageView.as_view()), url(r'^post', views.post) ]。但现在我收到错误模块“视图”没有属性“帖子”
  • 只保留url(r'^$', views.HomePageView.as_view()),因为您将对 POST 和 GET 使用相同的 URL。不要忘记从模板的表​​单标签中删除action="submit"
猜你喜欢
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
相关资源
最近更新 更多