我在想如何处理这种情况。我有三个观点:
def view0(request):
...
return render(request, 'home.html')
def view1(request):
...
return render(request, 'about.html')
这两个视图模板都扩展了一个名为'base.html'的模板,其中有一个联系人表单。
我想知道的是我是否需要在两个视图中编写python代码来处理表单操作中固有的所有逻辑?或者我可以创建一个视图,其唯一的工作就是处理这个特定表单的逻辑?
我试着创建一个单独的视图,给它分配一个url,表单的'action'属性引用它:
def base_view(request):
if request.method == 'POST'
contact_form = Form(request.POST)
#logic here
else:
contact_form = Form()
context = {'contact_form': contact_form}
return render (request, 'base.html', context)
def view0(request):
...
return render(request, 'home.html')
def view1(request):
...
return render(request, 'about.html')
'base.html'具有以下表单代码:
.....
<form action="{% url 'base_view_url' %}" method="post">
{% csrf_token %}
{{contact_form}}
<input type="submit" value="Invia">
</form>
.....
使用此代码,联系人表单无法工作。
1条答案
按热度按时间bvjxkvbb1#
您需要回到一些基础知识来理解表单是如何工作的。
1.每个表单都有一个操作URL,提交表单后将调用该URL。
1.一旦用户提交表单,浏览器将对表单数据进行编码并将其发送到操作URL。
1.一旦Django接收到action URL,它将根据URL模式匹配URL,以决定调用哪个视图。
1.视图将处理数据并向用户返回响应。
为了回答你的问题,你只需要一个视图来处理表单(假设表单在两个视图中是相同的),你可以设置动作URL总是调用'base_view_url'。此外,页面可以有多个表单,每个表单都有不同的动作URL。