Как устранить ошибку "NoReverseMatch" в Django?
Итак, я пытаюсь создать таблицу хостов, и в качестве одного из полей этой таблицы включить кликабельную ссылку на страницу обновления. Которая будет передавать host_id на страницу обновления. Я надеялся, что кто-нибудь подскажет мне, что я делаю неправильно в отношении передачи правильного параметра в upate/<host_id>. Поскольку я не совсем уверен в том, как решить эту проблему и сделать так, чтобы я мог направлять людей с помощью кликабельной кнопки в таблице на соответствующую страницу обновления. Когда я пытаюсь отобразить страницу с добавлением этого параметра, я получаю следующую ошибку:
NoReverseMatch at /website/home/
Reverse for 'update' with arguments '(1,)' not found. 1 pattern(s) tried: ['website/update/<host_id>']
Request Method: GET
Request URL: http://127.0.0.1:8000/website/home/
Django Version: 4.0.4
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'update' with arguments '(1,)' not found. 1 pattern(s) tried: ['website/update/<host_id>']
Он также конкретно указывает на следующую строку кода как на проблему:
<td><a href="{% url 'update' beacon.host_id %}"</a>Issue Command</td>
Эта строка находится в следующем сегменте HTML. Релевантный HTML-сегмент
{% for beacon in hosts %}
<tr>
<td>{{ beacon.host_id }}</td>
<td>{{ beacon.hostname }}</td>
<td>{{ beacon.internalIp }}</td>
<td>{{ beacon.externalIp }}</td>
<td>{{ beacon.current_user }}</td>
<td>{{ beacon.os }}</td>
<td>{{ beacon.admin }}</td>
<td><a href="{% url 'update' beacon.host_id %}"</a>Issue Command</td>
</tr>
{% endfor %}
Мой раздел urls.py выглядит следующим образом. urls.py
urlpatterns = [
re_path('home/', views.home),
re_path('host-detailed', views.host_detailed),
re_path('update/<host_id>', views.update, name='update'),
]
Relevant Models.py
class Command_Node(models.Model):
host_id = models.ForeignKey(Beacon, on_delete=models.CASCADE)
current_commands = models.CharField(
choices=CHOICES, max_length=50, null=True)
def __str__(self):
return str(self.host_id)
Relevant Views.py
def home(request):
hosts = Beacon.objects.all()
return render (request, 'home.html', {'hosts':hosts})
def host_detailed(request):
return render (request, 'hosts-detailed.html')
def update(request, host_id):
host_id = Command_Node.objects.get(pk=host_id)
form = Command_Node(request.POST or None, instance=host_id)
if form.is_valid():
form.save()
return redirect('home.html')
return render (request, 'update.html', {'host_id':host_id,'form':form})
Спасибо за любую помощь/информацию, которую вы можете предложить.
Попробуйте что-нибудь вроде этого: Urls:
path('update/<int:pk>',views.update,name='update'),
Шаблон
href="{% url 'update' pk = beacon.host_id %}"
Как также упоминалось в другом комментарии, я не думаю, что re_path - это путь к успеху
Как передать id в представление в качестве аргумента в Django?