URL-адрес Django удвоился - PullRequest
       25

URL-адрес Django удвоился

0 голосов
/ 10 декабря 2018

Когда я щелкнул тег привязки, чтобы перейти к подробному представлению моего продукта, URL удвоился.

http://127.0.0.1:8000/products/products/t-shirt/

Я думаю, что это должно быть так:

http://127.0.0.1:8000/products/t-shirt/

List.html

{% for object in object_list  %}
<a href="{{ object.get_absolute_url }}">{{object.title}}</a>
<br>
{{object.description}}
<br>
{{object.price}}
<br>
<br>
{% endfor %}

models.py

class Product(models.Model):
title = models.CharField(max_length=120)
slug = models.SlugField(blank=True, unique=True)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=19, default=39.99)
image = models.ImageField(upload_to=upload_image_path, null=True, blank=True)
featured = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)

# For url when you click a product
def get_absolute_url(self):
    return "products/{slug}/".format(slug=self.slug)


def __str__(self):
    return self.title

urls.py

from django.conf.urls import url

из импорта products.views (product_view, product_detail_view, product_featured_view,)

urlpatterns = [
url(r'products/$', product_view),
url(r'products/(?P<slug>[\w-]+)/$', product_detail_view),
url(r'featured/$', product_featured_view),

]

view.py

from django.shortcuts import render, get_object_or_404, Http404

from .models import Product

def product_view(request):
    queryset = Product.objects.all()
    context = {
        'object_list': queryset,
        # 'featured': fqueryset
    }
    return render(request, 'products/list.html', context)


def product_detail_view(request, slug=None, *args, **kwargs):
    try:
        instance = get_object_or_404(Product, slug=slug)
    except Product.DoesNotExist:
        raise Http404("Not Found..")
    except Product.MultipleObjectsReturned:
        queryset = Product.objects.filter(slug=slug)
        instance = queryset.first()

    context = {
        'object': instance
    }
    return render(request, 'products/detail.html', context)


def product_featured_view(request):
    queryset = Product.objects.filter(featured=True)
    context = {
    'object_list': queryset
    }
    return render(request, 'products/featured-list.html', context)

1 Ответ

0 голосов
/ 10 декабря 2018

Вы должны объявить свой Product.get_absolute_url по-другому:

def get_absolute_url(self):
    return "/products/{slug}/".format(slug=self.slug)

Я бы также предложил вам объявить его через reverse, как здесь сказано get_abosolute_url.

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