Have looked through a lot of similar NoReverseMatch Errors and couldn't solve my problem. This is in Django.
I keep getting: NoReverseMatch at /equipment32 Reverse for 'equipment' with arguments '('', 32)' not found. 1 pattern(s) tried: ['equipment(?P<equipment_id>[0-9]+)$']
Here is the traceback:
Traceback (most recent call last):
File "C:\ProgramData\Miniconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Albert\Desktop\HARVARD CS50\tracker_django\tracker\views.py", line 128, in equipment
return render(request, "jobs/equipment.html", context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 171, in render
return self._render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 163, in _render
return self.nodelist.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 163, in _render
return self.nodelist.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 936, in render
bit = node.render_annotated(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\base.py", line 903, in render_annotated
return self.render(context)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\template\defaulttags.py", line 443, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\ProgramData\Miniconda3\lib\site-packages\django\urls\base.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:\ProgramData\Miniconda3\lib\site-packages\django\urls\resolvers.py", line 677, in _reverse_with_prefix
raise NoReverseMatch(msg)
This is my template, job.html, that generates the links:
<table style="width: 900px">
<caption style="font-size: 25px">Equipment in Scope</caption>
<a href="#equipment_form" style="font-size: 20px">Add Equipment</a>
<tr>
<th>Site ID</th>
<th>Equipment Type</th>
<th>Manufacturer</th>
<th>Model</th>
<th>Test Sheet</th>
</tr>
{% for equipment in equipments %}
<tr>
{% csrf_token %}
<td><a href="{% url 'equipment' equipment.id %}">{{equipment.site_id}}</a></td>
<td>{{equipment.template.classification}}</td>
<td>{{equipment.manufacturer}}</td>
<td>{{equipment.model}}</td>
<td><a href="www.drive.google.com">Test Sheet</td>
</tr>
{% empty %}
<li>No Equipment</li>
{% endfor %}
</table> <br>
This seems to load fine and create links for each equipment object. Here's my urls.py:
from django.urls import path
from . import views, constructors
from .models import Job, FSR, Template, Equipment, TestEquipment
urlpatterns = [
path("equipment<int:equipment_id>", views.equipment, name="equipment"),
]
This url is supposed to link to views.equipment; here it is:
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.urls import reverse
from .models import Job, FSR, Template, Equipment, TestEquipment
def equipment(request, equipment_id):
if not request.user.is_authenticated:
return render(request, "jobs/login.html", {"message": None})
try:
equipment=Equipment.objects.get(pk=equipment_id)
except Equipment.DoesNotExist:
raise Http404("Equipment does not exist.")
context = {
"equipment": equipment,
"templates": Template.objects.all(),
"test_equipments": equipment.template.recommended_test_equipment.all(),
}
if request.user.is_authenticated:
return render(request, "jobs/equipment.html", context)
which should generate my actual equipment.html:
{% extends "jobs/base.html"%}
{% block title %}
{{equipment.site_id}}
{% endblock %}
{% block body %}
<h1 style = "text-align: center">{{equipment.site_id}} ({{equipment.template.classification}})</h1>
<style>table, th, td {
border: 1px solid black;
border-collapse: collapse;
}</style>
<table style="width:900px">
<caption style="font-size: 25px">Equipment Properties</caption>
<tr>
<td>Equipment Type</td>
<td><b>{{equipment.template.classification}}</b></td>
</tr>
<tr>
<td>Job Site ID or Name</td>
<td><b>{{equipment.site_id}}</b></td>
</tr>
<tr>
<td>Manufacturer</td>
<td><b>{{equipment.manufacturer}}</b></td>
</tr>
<tr>
<td>Model</td>
<td><b>{{equipment.model}}</b></td>
</tr>
<tr>
<td>Link to Manual</td>
<td><a href="https://www.eaton.com"><b>{{equipment.manual}}</b></a></td>
</tr>
<tr>
<td>Link to Item Folder</td>
<td><a><b>{{equipment.template.cloud_link}}</b></a></td>
</tr>
<tr>
<td>Equipment Questions</td>
<td><a><b>{{equipment.template.equipment_questions}}</b></a></td>
</tr>
<tr>
<td>Answers</td>
<!-- <form action="{% url 'equipment' job.id equipment.id%}" method="post">
<td><a><b><textarea id="scope" name="scope" rows="4" cols="55" >{{ equipment.equipment_answers }}</textarea><input type="submit" value="Confirm Answers">
<input type="reset"></b></a></td>
</form> -->
</tr>
<tr>
<td>Scope for This Equipment</td>
<td><a><b>{{equipment.scope}}</b></a></td>
</tr>
<tr>
<td>Additional Notes</td>
<td><a><b>{{equipment.notes}}</b></a></td>
</tr>
</table><br>
<h3>Recommended Test Equpiment</h3>
<ul>
{% for test_equipment in test_equipments %}
<li>
{% csrf_token %}
{{ test_equipment }}
</li>
{% empty %}
<li>No Equipment</li>
{% endfor %}
</ul>
<button onclick="goBack()">Back to Job Page</button>
<script>
function goBack() {
window.history.back();
}
</script>
{% endblock %}
I don't understand why it seems to be asking for two arguments equipment("", 35) because the views function only takes in equipment_id. Any help is very greatly appreciated!
in your template equipment.html
you provided two argument just remove job.id
. though it is commented but it should be proper urlpattern
<form action="{% url 'equipment' equipment.id%}" method="post">
<td><a><b><textarea id="scope" name="scope" rows="4" cols="55" >{{ equipment.equipment_answers }}</textarea><input type="submit" value="Confirm Answers">
<input type="reset"></b></a></td>
</form>