簡體   English   中英

無法在 Django 中傳遞帶有兩個參數的視圖函數,導致沒有反向匹配錯誤

[英]Unable to pass a view function with two arguments in Django resulting in No Reverse Match Error

我無法理解為什么會出現此錯誤。 如果有人可以解釋我為什么以及如何修復它,我希望它能糾正我可能對Django viewsurls的潛在誤解。

django.urls.exceptions.NoReverseMatch: Reverse for 'download' with keyword arguments '{'name': 'Dr. XYZ', 'date': '14 July 2020'}' not found. 1 pattern(s) tried: ['download/$']

我的views.py有一個名為download的函數,它有兩個參數: namedate

視圖.py

def download (request, name, date):
    x = date.split(" ")
    date = f"29 {x[3]} {x[4]}"
    image = Image.open("certificates\static\certificates\Certificate_0001.jpg")
    font_type = ImageFont.truetype('arial.ttf', 70)
    font_type_2 = ImageFont.truetype('arial.ttf', 35)
    draw = ImageDraw.Draw(image)
    draw.text(xy=(810, 740), text=name, fill=(0,102,0), font=font_type)
    draw.text (xy=(330, 1230), text=date, fill=(0,102,0), font=font_type_2)
    image.save(f"certificates\static\certificates\{name}.pdf", "PDF", resolution=100.0)
    return HttpResponse ("works")

我在我的html文件中單擊鏈接時調用此函數。

 <a class="nav-link active" href="{% url 'certificates:download' name=name date=program %}" download>Download Certificate</a>

網址配置為:

網址.py

from django.urls import path

from . import views

app_name = "certificates"
urlpatterns = [
    path("", views.index, name="index"), 
    path("download", views.download, name="download")

]

已確認我的函數中沒有語法或其他邏輯錯誤。 如果我刪除我的html文件中的兩個參數,那么沒有錯誤,即如果我說html href="{% url 'certificates:download' %} 。但是,如果我帶來了兩個參數namedate我會收到此NoReverseMatch錯誤.

請解釋什么是錯的?

您需要在 URL 定義中指定函數參數

path("download/<str:name>/<str:date>", name="download")

這樣,反向函數可以使用正確的參數解析您的函數。

<a ... > 標簽中的鏈接轉到“證書/下載/某個名稱/某個日期”。 即你傳遞參數'somename'和'somedate'所以你應該在你的url配置中添加這些參數

path("download/<str:name>/<str:date>", views.download, name="download")

然后你在你的視圖函數def download (request, name, date):

讓我知道它是否有效

您還需要將這些參數添加到urls.py文件中,即:

path("download/<str:name>/<str:date>/", views.download, name="download"),

但是,我不確定您的日期格式,因此您可能需要稍微更改該部分。

暫無
暫無

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

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