无法在 Django 中传递带有两个参数的视图函数,导致无反向匹配错误

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

我不明白为什么会出现此错误。如果有人可以向我解释为什么以及如何修复它,我希望它能纠正我可能对 Django viewsurls.[=27= 存在的潜在误解]

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

Views.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")

我在 link 单击我的 html 文件时调用此函数。

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

url配置为:

urls.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")

这样反向函数可以使用正确的参数解析您的函数。

Link 您在 标签中转到 'certificates/download/somename/somedate'。即你传递参数 '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"),

但是,我不确定你日期的格式,所以你可能需要稍微更改一下那部分。