Ошибка DJANGO. Реверс для 'receipt' с аргументами '('',)' не найден. Испробован 1 шаблон(ы): ['receipt/(?P<pk>[^/]+)/$'] пытается использовать ID:PK

Многое происходит здесь, последняя строка в inventory.Html должна ссылаться на страницу продукта, используя id из PRODUCTS в views.py. Я пытаюсь создать страницу для каждого продукта, используя ID, но путь не работает.

инвентаризация.html код

                    {% for i in items %}
                    
                
                        <tr>
                            <td>{{i.Name_of_the_Material_per_specification}}</td>
                            <td>{{i.Site_Material_Code }}</td>
                            <td><a class="btn btn-sm btn-info" href="{% url 'receipt' products.id %}">View</a></td>
                            
                            
                        </tr>
                        
                    
                    {% endfor %}
                    

RECIEPT.HTML

    <div class="col-md">
            <div class="card card-body">
                        {% csrf_token %}
                        {% for i in products %}

                        <p>Name: {{products.Name_of_the_Material_per_specification}}</p>
                        
                        
                        {% endfor %}
        
            </div>
        </div>  

URLS.PY

from django.contrib import admin
from django.urls import path, include
from inventory import views


urlpatterns = [
    path('main', views.inventory, name='inventory'),
    path('receipt/<str:pk>/', views.products, name="receipt")

views.py

from django.shortcuts import render, HttpResponse

from django.template import loader
from django.shortcuts import redirect
from .models import *
from .forms import *



# Create your views here.
def inventory(request):
    items = materialForm.objects.all()
  
    return render(request, 'website/inventory.html', {'items': items})

def products(request, pk):
    products = materialForm.objects.get(id=pk)
    context = {'products':products }

    return render(request, 'website/receipt.html', context )

Вы делаете следующее:

<td><a class="btn btn-sm btn-info" href="{% url 'receipt' products.id %}">View</a></td>

Однако products.id пуст или не существует, так что это, возможно, то, что вы хотите:

<td><a class="btn btn-sm btn-info" href="{% url 'receipt' i.id %}">View</a></td>

Вы получаете [ Но теперь я получаю "'materialForm' object is not iterable" ], потому что в receipts.html, Вы итерируете содержимое внутри набора продуктов с помощью i, но затем внутри цикла Вы снова используете имя набора продуктов напрямую вместо использования созданного итератора i...


сделайте изменения, указанные в файлах inventory.html и receipt.html и попробуйте снова...

инвентаризация.html код

                {% for i in items %}
                
            
                    <tr>
                        <td>{{i.Name_of_the_Material_per_specification}}</td>
                        <td>{{i.Site_Material_Code }}</td>
                        #change the next line to
                        <td><a class="btn btn-sm btn-info" href="{% url 'receipt' products.id %}">View</a></td>

                        #this
                        <td><a class="btn btn-sm btn-info" href="{% url 'receipt' i.id %}">View</a></td>
                        
                        
                    </tr>
                    
                
                {% endfor %}
                

RECIEPT.HTML

<div class="col-md">
        <div class="card card-body">
                    {% csrf_token %}
                    {% for i in products %}
                    #change the next line to
                    <p>Name: {{products.Name_of_the_Material_per_specification}}</p>
                    #this
                    <p>Name: {{i.Name_of_the_Material_per_specification}}</p>
                    
                    {% endfor %}
    
        </div>
    </div>  

URLS.PY

from django.contrib import admin
from django.urls import path, include
from inventory import views


urlpatterns = [
    path('main', views.inventory, name='inventory'),
    path('receipt/<str:pk>/', views.products, name="receipt")

views.py

from django.shortcuts import render, HttpResponse

from django.template import loader
from django.shortcuts import redirect
from .models import *
from .forms import *



# Create your views here.
def inventory(request):
    items = materialForm.objects.all()
  
    return render(request, 'website/inventory.html', {'items': items})

def products(request, pk):
    products = materialForm.objects.get(id=pk)
    context = {'products':products }

    return render(request, 'website/receipt.html', context )
Вернуться на верх