【问题标题】:Reverse for 'dome_view' with no arguments not found. 1 pattern(s) tried: ['dome2/(?P<id>[0-9]+)/$']未找到任何参数的“dome_view”反向。尝试了 1 种模式:['dome2/(?P<id>[0-9]+)/$']
【发布时间】:2021-12-12 06:11:49
【问题描述】:

我尝试向外部 API 发送请求以执行 PATCH 方法。 我有一个如下定义的视图: def dome_view(请求,ID): ......

我需要 id 才能将其传递给表单操作并在外部的其他端点上进行必要的更新。我的 url 模式就像那个 path('dome2/int:id/', views.dome_view, name='dome_view '),

当我将 id 放入如下所示的表单操作时,我收到错误“Reverse for 'dome_view' with no arguments not found.”

form action="{% url 'dome_view' id %}"

但是当我输入我想要更新的确切 ID 时,PATCH 方法成功了。 例如:form action="{% url 'dome_view' 5 %}" method="post">

我怎样才能成功发送 PATCH 请求,而无需每次都指定确切的 id 以形成操作? 我只想这样做 form action="{% url 'dome_view' id %}" method="post"

我错过了什么?

我的蟒蛇视图

def dome_view(request, id):
     filled_form = ContactForm(request.POST)
     if request.method == 'POST':
        if filled_form.is_valid():
            ''' Begin reCAPTCHA validation '''
            recaptcha_response = request.POST.get('g-recaptcha-response')
            url = '<google_captchurl>'
            values = {
               'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
               'response': recaptcha_response
            }
            data = urllib.parse.urlencode(values).encode()
            req =  urllib.request.Request(url, data=data)
            response = urllib.request.urlopen(req)
            result = json.loads(response.read().decode())
            ''' End reCAPTCHA validation '''
            if result['success']:
                      
                url = "<here_api_url_for_auth>"
                requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
                payload={}
                headers = {
                   'Content-Type': 'application/json',
                   'Authorization': 'Basic xxxxxxxx'
                }
                        
                response = requests.request("POST", url, headers=headers, data=payload, verify=False)
                tok=response.json().get('response')['token']
                p_url = "<here_my_api_url_for_patch>"
                p_url += str(id)
                  payload = json.dumps({
                   "fieldData": {
                
                   "yas": filled_form.cleaned_data['yas']
                  }
                })
                headers = {
                   'Content-Type': 'application/json',
                   'Authorization': 'Bearer '+ tok
                }                          
                
                response = requests.request("PATCH", p_url, headers=headers, data=payload, verify=False)
                if response.status_code == 200:
           
                   return HttpResponseRedirect("/thank-you")
                else:
                   do smth
            else:
               do smth
    else:
         form = ContactForm()
         return render(request, 'my_forms/dome2.html', {'contactform':form})

谢谢

【问题讨论】:

  • 我们可以在视图中看到您的功能吗?
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: django forms api external patch


【解决方案1】:

我通过在渲染请求部分添加 id 来修复它: 之前

else:
    form = ContactForm()
    return render(request, 'my_forms/dome2.html', {'contactform':form})

之后

else:
    form = ContactForm()
    return render(request, 'my_forms/dome2.html', {'contactform':form, 'id':id})

在我的 html 模板上我还添加了 id

之前:

<form action="{% url 'contact' %}" method="post">

之后:

<form action="{% url 'contact' id %}" method="post">

问候

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 2021-08-10
    • 2020-10-21
    • 1970-01-01
    • 2019-02-07
    • 2019-11-18
    • 2020-08-16
    • 2019-09-07
    相关资源
    最近更新 更多