关于类别get_absolute_url的反向URL

时间:2019-08-19 11:10:36

标签: django django-urls

这是我的类别get_absolute_url

def get_absolute_url(self):
    return reverse('products:categories_display', args=[self.id, self.slug])

这是我的产品视图

class category_slug_view(ObjectViewedMixin, DetailView):
    queryset = Category.objects.all()
    template_name = "products/product_page.html"

这是我的产品网址

    url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', category_slug_view.as_view()),

3 个答案:

答案 0 :(得分:1)

要使用反向products:categories_display,您需要:

  1. 确保您的应用程序app_name = 'products'中有urls.py
  2. 命名您的网址格式
app_name = 'products'

urlpatterns = [
    url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', category_slug_view.as_view(), name='categories_display'),
]

顺便说一句,Python / Django中的建议是将您的基于类的视图命名为CategorySlugView,以明确表明它是一个类。

答案 1 :(得分:0)

您需要给您的url(..)指定一个名称,也许还要命名空间:

app_name = 'products'

urlpatterns = [
    url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', category_slug_view.as_view(), name='categories_display'),
]

起,您可以使用path(..),它们通常更紧凑,更易读:

from django.urls import path

app_name = 'products'

urlpatterns = [
    path('<int:id>/<slug:slug>/', category_slug_view.as_view(), name='categories_display'),
]

在您的reverse(..)函数调用中使用命名参数可能会更好:

def get_absolute_url(self):
    return reverse(
        'products:categories_display',
        kwargs={'id': self.id, 'slug': self.slug}
    )

答案 2 :(得分:0)

我将我的get_absolute_url更改为此

def get_absolute_url(self):         return reverse('categories_display',args = [self.id,self.slug])

我给我的网址模式起了一个名字

url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', category_slug_view.as_view(), name='categories_display'),