簡體   English   中英

如何解決 django 中的反向匹配錯誤

[英]How to resolve reverse match error in django

我是 Django 的新手,我不明白為什么會彈出這個錯誤:

django.urls.exceptions.NoReverseMatch: Reverse for 'updater' with no arguments not found. 1 pattern(s) tried: ['update/(?P<updating>[0-9]+)$']
[26/Jul/2020 19:05:05] "GET /update/2 HTTP/1.1" 500 127513

我的網址:

urlpatterns=[   
    path('update/<int:updating>',views.update,name='updater'),
]

html 頁面:

<!DOCTYPE html>
<html lang="en">
<head>
{% load static %}
    <title>NEW PRODUCT</title>
    
</head>
<body>

    <div class="bg-contact2" style="background-image: url('images/bg-01.jpg');">
        <div class="container-contact2">
            <div class="wrap-contact2">
                <form class="contact2-form validate-form" method="post" action="{%url 'updater' %}" enctype="multipart/form-data">
                    {% csrf_token %}

                    <span class="contact2-form-title">
                        Provide Product details Below
                    </span>

                    <div class="wrap-input2 validate-input" data-validate="type is required">
                        <input class="input2" type="text" name="type" value="{{details.product_type}}">
                        <span class="focus-input2" data-placeholder="PRODUCT-TYPE"></span>
                    </div>

                    <div class="wrap-input2 validate-input" data-validate = "Name is required">
                        <input class="input2" type="text" name="name" value="{{details.product_name}}">
                        <span class="focus-input2" data-placeholder="PRODUCT NAME"></span>
                    </div>

                    <div class="wrap-input2 validate-input" data-validate = "description is required">
                        <textarea class="input2" name="description">{{details.product_description}}</textarea>
                        <span class="focus-input2" data-placeholder="PRODUCT DESCRIPTION"></span>
                    </div>

                    <div class="wrap-input2 validate-input" data-validate = "Price is required">
                        <input class="input2" type="number" name="price" value="{{details.product_price}}">
                        <span class="focus-input2" data-placeholder="PRICE"></span>
                    </div>

                    <div class="wrap-input2 validate-input" data-validate = "Picture is required">
                        <label >product sample picture</label>
                        <input class="input2" type="file" name="picture">
                        <span class="focus-input2" data-placeholder=""></span>
                    </div>

                    <div class="container-contact2-form-btn">
                        <div class="wrap-contact2-form-btn">
                            <div class="contact2-form-bgbtn"></div>
                            <button class="contact2-form-btn">
                                Update Product Listing
                            </button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>


</body>
</html>

我的看法:

def update (request,updating):
    if request.method=='POST':
        product_details=product_info.objects.get(id=updating)
        product_details.product_type=request.POST.get('type')
        product_details.product_name=request.POST.get('name')
        product_details.product_description=request.POST.get('description')
        product_details.product_price=request.POST.get('price')
        if (len(request.FILES) != 0):
            image = request.FILES['picture']
            product_details.product_pic = image
        product_details.save()
        alldetails = product_info.objects.all()
        return render(request, 'adminside/editingpage.html', {'editing_details': alldetails})
    else:
        product_details = product_info.objects.get(id=updating)
        return render(request,'adminside/updating.html',{'details':product_details})
def update (request,updating) :
    if request.method=='POST' :
        product_details=product_info.objects.get(id=updating)
        product_details.product_type=request.POST.get('type')
        product_details.product_name=request.POST.get('name')
        product_details.product_description=request.POST.get('description')
        product_details.product_price=request.POST.get('price')
        if (len(request.FILES) != 0):
            image = request.FILES['picture']
            product_details.product_pic = image
        product_details.save()
        alldetails = product_info.objects.all()
        return render(request, 'adminside/editingpage.html', {'editing_details': alldetails})
    else:
        product_details = product_info.objects.get(id=updating)
        return render(request,'adminside/updating.html',{'details':product_details})
def update (request,updating):
    if request.method=='POST':
        product_details=product_info.objects.get(id=updating)
        product_details.product_type=request.POST.get('type')
        product_details.product_name=request.POST.get('name')
        product_details.product_description=request.POST.get('description')
        product_details.product_price=request.POST.get('price')
        if (len(request.FILES) != 0):
            image = request.FILES['picture']
            product_details.product_pic = image
        product_details.save()
        alldetails = product_info.objects.all()
        return render(request, 'adminside/editingpage.html', {'editing_details': alldetails})
    else:
        product_details = product_info.objects.get(id=updating)
        return render(request,'adminside/updating.html',{'details':product_details})

我認為這與在 url 中傳遞產品的 id 有關,但我不確定如何解決它。

您沒有在 url 中輸入任何參數,您必須在表單操作中輸入參數才能像這樣更新

<form class="contact2-form validate-form" method="post" action="{%url 'updater' updating='ANYVALUE' %}" enctype="multipart/form-data">

因為你沒有指定任何值你的 url 不匹配

此 urlpattern update/采用int路由參數

path('update/<int:updating>',views.update,name='updater'),

在您的模板中,您嘗試使用不包含參數的反向updater 因此,它試圖反轉到update/的 urlpattern,它找不到,因為您只有update/<int:updating>的路徑

{%url 'updater' %}

您需要將其更改為以下內容,因為您為context object 提供了名稱details ,您可以訪問

{%url 'updater' details.id %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM