无法在 Django 中传递带有两个参数的视图函数,导致无反向匹配错误
Unable to pass a view function with two arguments in Django resulting in No Reverse Match Error
我不明白为什么会出现此错误。如果有人可以向我解释为什么以及如何修复它,我希望它能纠正我可能对 Django
views
和 urls
.[=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
的函数,它有两个参数:name
和 date
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' %}
。但是,如果我带上 name
和 date
这两个参数,我会得到这个 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"),
但是,我不确定你日期的格式,所以你可能需要稍微更改一下那部分。
我不明白为什么会出现此错误。如果有人可以向我解释为什么以及如何修复它,我希望它能纠正我可能对 Django
views
和 urls
.[=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
的函数,它有两个参数:name
和 date
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' %}
。但是,如果我带上 name
和 date
这两个参数,我会得到这个 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"),
但是,我不确定你日期的格式,所以你可能需要稍微更改一下那部分。