2017-11-19 6 views
0

Ich kann die Produkte in der ProductDetailView nicht anzeigen.NoReverseMatch: Django URL

ProductDetailView kehrt leere Zeichenfolge 'Kategorie-Detail' ..

In Produktbeschreibung anzeigen es Links zu:

http://127.0.0.1:8000/products/products/6/ 

aber gibt diesen Fehler zurück:

Reverse for 'category_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['products/categories/(?P<pk>\\d+)$'] 

Die Informationen erscheint in der Listenansicht für Kategorie und Produkt.

urls.py

url(r'^categories/(?P<pk>\d+)/$', views.CategoryDetailView.as_view(), name='category_detail'), 

models.py

class Category(models.Model): 
    """ 
    Model For a product category 
    """ 

    c_name = models.CharField(max_length=200, help_text="Enter a Product Category: ") 


    def __str__(self): 
     """ 
     String Representation for the Model object 
     """ 
     return self.c_name 

    def get_absolute_url(self): 
     """ 
     Return an absolute URL to access a product instance 
     """ 
     return reverse('category_detail', args=[str(self.id)]) 

views.py

class CategoryDetailView(generic.DetailView): 
    template_name = 'category_detail.html' 
    context_object_name = 'category_detail' 
    paginate_by = 2 
    model = Category 

    def get_object(self): 
     return get_object_or_404(self.model, pk=self.kwargs['pk']) 

    def get_context_data(self, *args, **kwargs): 
     context = super(CategoryDetailView, self).get_context_data(*args, **kwargs) 
     context['products'] = self.get_object().products.all() 
     return context 


class ProductDetailView(generic.DetailView): 
    model = Product 
    context_object_name = 'product_detail' 
    template_name = 'product_detail.html' 
    paginate_by = 2 

    def get_object(self): 
     return get_object_or_404(self.model, pk=self.kwargs['pk'])  

    def get_context_data(self, *args, **kwargs): 
     context = super(ProductDetailView, self).get_context_data(*args, **kwargs) 
     return context  

html

<p><strong>Category:</strong> <a href="{% url 'category_detail' product.category.pk %}">{{ product.category }}</a></p> 

Was ich vermisse?

Antwort

0

Sie müssen die Kontextnamen nehmen

class CategoryDetailView(generic.DetailView): 
    ... 
    context_object_name = 'category_detail' # 
    ... 

class ProductDetailView(generic.DetailView): 
    ... 
    context_object_name = 'product_detail.html' 
    ... 

Diese mit dem Verbindungssystem sind durcheinander.

Eine andere Sache .. in der Produktdetail.html. Sie müssen die product.pk in die URL

 <a href="{% url 'product-update' product.pk %}" class="btn btn-primary" role="button">update</a> 

     <a href="{% url 'product-delete' product.pk %}" class="btn btn-danger" role="button">Delete</a> 

Das sollte funktionieren ..

auch vielleicht Link zurück auf die Produktdetailansicht hinzuzufügen, wenn Sie mit der Bearbeitung des Produkts abgeschlossen haben :)

0

Ich denke, Ihre CategoryDetailView brauchen get_object.

from django.shortcuts import get_object_or_404 
... 


class CategoryDetailView(generic.DetailView): 
    template_name = 'category_detail.html' 
    context_object_name = 'category_detail' 
    paginate_by = 2 
    model = Category 

    def get_object(self): 
     return get_object_or_404(self.model, pk=self.kwargs['pk']) 

    def get_context_data(self, *args, **kwargs): 
     context = super(CategoryDetailView, self).get_context_data(*args, **kwargs) 
     context['products'] = self.get_object().products.all() 
     return context 

und ändern Sie die URL;

url(r'^categories/(?P<pk>\d+)$', ... 

zu:

url(r'^categories/(?P<pk>\d+)/$', ... 
+0

Hallo Ich bekomme immer noch den Fehler: Reverse für 'Kategorie-Detail' mit Argumenten '(' ',)' nicht gefunden. 1 Muster versucht: ['Produkte/Kategorien/(? P \\ d +)/$'] .. – MennoVanDeVlees

+0

Ich habe meine Frage mit Ihren Anregungen aktualisiert. Ich denke, ich habe es vielleicht schon versucht, aber ich bin jetzt schon eine Weile im Kreis – MennoVanDeVlees