我有一个表格,上面有数据值列表。其中一列包含指向另一页面的链接。有时可能有一个链接,有时可能有两个,有时可能有 n 个。
当只有一个链接时,代码按预期工作,模式匹配并转到预期页面。每当存在多个链接时,就会失败。它仍然会正确构建 url,我可以在浏览器的搜索栏中看到完整正确的 url,但我收到 NoReverseMatch 错误。
错误:
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'thelink' with arguments '('64f75fake8012b456073fake', '')' not found. 1 pattern(s) tried: ['thelink/(?P<table>[^/]+)/(?P<row>[^/]+)\\Z']
url.py
path('thelink/<str:table>/<str:row>', views.thelink, name='thelink'),
html 工作和中断的地方:
<td>
{% for table, row in data %}
<a href="{% url 'thelink' table row %}" type="button" class="badge badge-info">
link
</a>
{% endfor %}
</td>
从 html 代码生成 HTML:
工作:
<a href="/thelink/64f75fake8012b456073fake/64f75be82fakeb456073fake" type="button" class="badge badge-info">link</a>
不工作:
<a href="/thelink/64f75fake8012b456073fake/64f75be82fakeb45603fake1" type="button" class="badge badge-info">link</a>
<a href="/thelink/64f75fake8012b456073fake/64f75be82fakeb45603fake2" type="button" class="badge badge-info">link</a>
<a href="/thelink/64f75fake8012b456073fake/64f75be82fakeb45603fake3" type="button" class="badge badge-info">link</a>
根据您描述的错误,似乎第二个参数
row
不存在。这意味着您的数据中存在 None
或 ''
(缺失)值。本质上,它在尝试渲染时中断:
<a href="{% url 'thelink' table '' %}" type="button" class="badge badge-info">
link
</a>
所以,我想你可以在尝试反向解决不存在的问题之前
if check
:
<td>
{% for table, row in data %}
{% if row %}
<a href="{% url 'thelink' table row %}" type="button" class="badge badge-info">
link
</a>
{% else %}
<p>No links here.</p>
{% endif %}
{% endfor %}
</td>
由于您没有共享任何模型或视图,我不知道您如何存储或访问这些数据。无论如何,这对于您为
template
提供的代码仍然没有多大意义。
因为每个
links
都会有一个 data value
的嵌套列表(空或有多个值)。如果我理解正确的话。
这是一种利用框架relations来实现这一点的优雅方法:
模型.py
class SomeTable(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
class RelatedLink(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
some_table = models.ForeignKey(
SomeTable,
related_name='links',
on_delete=models.CASCADE
)
views.py
def index(request):
data_values = SomeTable.objects.prefetch_related("links")
return render(request, "index.html", {"data_values": data_values})
index.html
<table>
<tr>
<th>Table</th>
<th>Links</th>
</tr>
{% for table in data_values %}
<tr>
<td>{{table.id}}</td>
{% if not table.links.all %}
<td>
No links here.
</td>
{% else %}
<td>
{% for link in table.links.all %}
<a href="{% url 'thelink' table.id link.id %}" type="button" class="badge badge-info">
{{link.id}}
</a>
<br>
{% endfor %}
</td>
{% endif %}
</tr>
{% endfor %}
</table>