【问题标题】:about reverse url for category get_absolute_url关于类别 get_absolute_url 的反向 url
【发布时间】:2019-12-24 14:29:29
【问题描述】:

这是我的类别 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()),

【问题讨论】:

  • 问题是什么?
  • 不清楚你想在这里问什么!

标签: django django-urls


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    您需要为您的url(..) 提供一个名称,也许还需要一个命名空间:

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

    由于,你可以使用path(..)s,它通常更简洁易读:

    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}
        )

    【讨论】:

      【解决方案3】:

      我把我的 get_absolute_url 改成了这个

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

      我给我的 url 模式起了个名字

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

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2017-09-18
        • 2012-01-25
        • 2020-07-10
        • 2011-04-28
        • 1970-01-01
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多