Django表单的基本模板中的表单逻辑

uxh89sit  于 2023-04-22  发布在  Go
关注(0)|答案(1)|浏览(140)

我在想如何处理这种情况。我有三个观点:

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>

.....

使用此代码,联系人表单无法工作。

bvjxkvbb

bvjxkvbb1#

您需要回到一些基础知识来理解表单是如何工作的。
1.每个表单都有一个操作URL,提交表单后将调用该URL。
1.一旦用户提交表单,浏览器将对表单数据进行编码并将其发送到操作URL。
1.一旦Django接收到action URL,它将根据URL模式匹配URL,以决定调用哪个视图。
1.视图将处理数据并向用户返回响应。
为了回答你的问题,你只需要一个视图来处理表单(假设表单在两个视图中是相同的),你可以设置动作URL总是调用'base_view_url'。此外,页面可以有多个表单,每个表单都有不同的动作URL。

相关问题