Ошибка 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 )