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()),
答案 0 :(得分:1)
要使用反向products:categories_display
,您需要:
app_name = 'products'
中有urls.py
。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'),
]
自django-2.0起,您可以使用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'),