html 在django中,带post的表单没有达到我的功能

2wnc66cl  于 2023-01-15  发布在  Go
关注(0)|答案(2)|浏览(130)

我被一个愚蠢的问题卡住了。
我正在django上使用一个表单(html),这个表单将被用来更新我的数据库中关于页面的信息。
所以我的问题是:django终端告诉我他正确地收到了邮件

app_1  | [10/Jan/2023 17:44:50] "GET /nb_database/49/ HTTP/1.1" 200 11810
app_1  | [10/Jan/2023 17:44:54] "POST /nb_database/49/ HTTP/1.1" 200 11810

然而,我做了一个快速的函数来知道我的信息从形式来的功能,这里的问题。该函数从来没有打印任何东西,我假设的请求从来没有达到该函数
下面是函数(位于名为'nb_database'的应用程序上):

def adding_address_to_db(request):
    print("OK REQUETE RECEIVE")

urls.py(在同一应用程序上):

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('nb_database', views.nb_database, name='nb_database'),
    path('nb_database/<int:annonce_id>/', views.detail, name='detail'),
    path('nb_database/<int:annonce_id>/', views.adding_address_to_db, name='adding_address_to_db'),
]

这是HTML格式的表单,在本例中,假设它位于www.example.com页面上mysite.com/nb_database/49/

<form action="" method="post">
       {% csrf_token %} 
       <input type="text" name="adding_address_to_db" placeholder="Entrez l'adresse" style="color: black;">  
</form>

基本上,我希望能够回答生成的页面上的表单(mysite.com/nb_database/49/),并留在它一旦回答。
任何帮助都是受欢迎的!谢谢大家,祝你们愉快

iyzzxitl

iyzzxitl1#

在urls.py中有两个相同的路径,当访问mysite.com/nb_database/49/时,只有第一个路径中的函数运行,第二个路径中的函数不运行。
删除这一行,您的函数将运行:

path('nb_database/<int:annonce_id>/', views.detail, name='detail'),
ou6hu8tu

ou6hu8tu2#

好吧,我解决了我的问题。
如前所述,你不能有2个网址指向2个不同的功能视图。
我不得不使用django提供的Form类。使用post方法和form类,我管理在生成页面的函数中添加我的函数,并处理何时发送post方法以捕获POST请求并执行代码。
下面是Django表单文档的链接:Django Documentation
这是我必须添加到渲染函数中的代码:

from django.http import HttpResponseRedirect
from django.shortcuts import render

from .forms import NameForm

def get_name(request):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = NameForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:
            return HttpResponseRedirect('/thanks/')

    # if a GET (or any other method) we'll create a blank form
    else:
        form = NameForm()

    return render(request, 'name.html', {'form': form})

相关问题