【问题标题】:django URL doubleddjango URL 翻倍
【发布时间】:2018-12-10 14:15:09
【问题描述】:

当我点击进入我的产品详细视图的锚标签时,网址翻了一番。

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

我觉得应该是这样的:

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

列表.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)

【问题讨论】:

    标签: python django django-models django-urls


    【解决方案1】:

    您需要以不同方式声明您的Product.get_absolute_url

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

    我还建议您通过reverse 声明它,正如这里所说的get_abosolute_url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多