NoReverseMatch в / myapp / products / - PullRequest
       1

NoReverseMatch в / myapp / products /

1 голос
/ 08 марта 2019
NoReverseMatch at/myapp/products/
Reverse for 'product_detail' not found. 'product_detail' is not a valid view function or pattern name. 

Error during template rendering 
In template C:\Users\User\job\mysite\myvenv\myproject\myapp\templates\base_generic.html, error at line 8

<meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit="no">

Я новичок в Django и использую версию 2.1 Когда я смотрю на http://127.0.0.1:8000/, У меня есть ошибка выше при нажатии «Продукты» вместо получения названия продукта.

В base_generic.html

<meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit="no">

<li><a href="{% url 'myapp:products'%}">Products</a></li>

At product_list.html,

{% extends "base_generic.html" %}

{% if product_list %}

{% for product in product_list %}

<a href="{{product.get_absolute_url}}">{{product.name}}</a>

{% endfor %}

{% else %}

No product 

{% endif %}

{% endblock %}

В myapp urls.py,

from django. urls import path 
from myapp import views

app_name = 'myapp'

urlpatterns = [
      path('products/', views. ProductListView.as_view(), name='products'), 
      path('product/<int:pk>/', views.ProductDetailView.as_view(), name='product-detail'), 
]

В models.py,

from django.db import models
from django.urls import reverse 

class Product(models.Model):
        name = models.CharField(max_length=100)
        description = models.TextField(max_length=200, help_text="Enter a brief description of the product.")

        def __str__(self):
               return self.name

        def get_absolute_url(self):
               return reverse('myapp/product_detail', args=[str(self.id)])

На views.py,

class ProductListView(generic.ListView):
       model = Product 

       def product_list_view(request):
              products = Product.objects.filter(name=name)
              return render(
                     request,
                     'myapp/product_list.html', 
                      {'products':product}
              )

class ProductDetailView(generic.DetailView):
        model = Product 

         def product_detail(request, pk):
                product_id = get_object_or_404(Product, pk=pk)
                 return render(
                        request, 
                        'microfinance/product_detail.html',
                        context={'product_id':product}
                 )

Что я должен сделать, чтобы получить название продукта при нажатии «Продукты» и оттуда (также при нажатии на название продукта) получить сведения о продукте?

1 Ответ

0 голосов
/ 10 марта 2019

В функции reverse вам нужно передать app_name:name, а не app_name/name.

В вашем случае:

    def get_absolute_url(self):
           return reverse('myapp:product_detail', args=[str(self.id)])

См. документы для полного объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...