繁体   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