Django url slugs with modeltranslation NoReverseMatch 错误
Django url slugs with modeltranslation NoReverseMatch Error
我在我的项目中使用模型翻译,我的目标也是翻译我的 urls 的 slug。
slug 已成功翻译,我覆盖了模型的保存方法以自动填充项目中所有语言的 slug 字段。
class FrontendCategory(models.Model):
name = models.CharField(_('Name'), max_length=255, db_index=True)
slug = AutoSlugField(_('Slug'), populate_from='name', max_length=255, db_index=True)
def save(self, *args, **kwargs):
for lang_code, lang_verbose in settings.LANGUAGES:
if hasattr(self, 'slug_%s' % lang_code) and hasattr(self, 'name_%s' % lang_code):
setattr(self, 'slug_%s' % lang_code, slugify(getattr(self, 'name_%s' % lang_code, u"")))
def get_absolute_url(self):
url = reverse(
'catalogue:frontend-category',
kwargs={'frontend_category_slug': self.slug, 'pk': self.pk})
return url
我检查过,所有的 slug 都被翻译并正确保存在数据库中。
这是我的 url:
url(r'^section/(P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$',
self.frontend_category_view.as_view(), name='frontend-category'),
如果我在模板中调用 get_absolute_url 方法,则会引发以下错误:
Reverse for 'frontend-category' with arguments '()' and
keyword arguments '{'pk': 5, 'frontend_category_slug':'test-slug'}' not found.
1 pattern(s) tried: ['de/catalogue/section/(P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$']
这看起来很奇怪,因为它正是我在 url 定义中定义的内容。在我使用 modeltranslation 翻译 slug 之前,所有这些都在工作。 url 定义是否执行了某种 slug 查找?
我还漏掉了什么吗?
事实证明,我的问题与模型翻译和语言无关,在我编辑代码时,我不小心编辑了我的 url 定义,导致了这个错误。
url(r'^section/(P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$',
self.frontend_category_view.as_view(), name='frontend-category'),
应该是
url(r'^section/(?P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$',
self.frontend_category_view.as_view(), name='frontend-category'),
(P 前缺少问号):
?P<frontend_category_slug>
我在我的项目中使用模型翻译,我的目标也是翻译我的 urls 的 slug。
slug 已成功翻译,我覆盖了模型的保存方法以自动填充项目中所有语言的 slug 字段。
class FrontendCategory(models.Model):
name = models.CharField(_('Name'), max_length=255, db_index=True)
slug = AutoSlugField(_('Slug'), populate_from='name', max_length=255, db_index=True)
def save(self, *args, **kwargs):
for lang_code, lang_verbose in settings.LANGUAGES:
if hasattr(self, 'slug_%s' % lang_code) and hasattr(self, 'name_%s' % lang_code):
setattr(self, 'slug_%s' % lang_code, slugify(getattr(self, 'name_%s' % lang_code, u"")))
def get_absolute_url(self):
url = reverse(
'catalogue:frontend-category',
kwargs={'frontend_category_slug': self.slug, 'pk': self.pk})
return url
我检查过,所有的 slug 都被翻译并正确保存在数据库中。
这是我的 url:
url(r'^section/(P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$',
self.frontend_category_view.as_view(), name='frontend-category'),
如果我在模板中调用 get_absolute_url 方法,则会引发以下错误:
Reverse for 'frontend-category' with arguments '()' and
keyword arguments '{'pk': 5, 'frontend_category_slug':'test-slug'}' not found.
1 pattern(s) tried: ['de/catalogue/section/(P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$']
这看起来很奇怪,因为它正是我在 url 定义中定义的内容。在我使用 modeltranslation 翻译 slug 之前,所有这些都在工作。 url 定义是否执行了某种 slug 查找? 我还漏掉了什么吗?
事实证明,我的问题与模型翻译和语言无关,在我编辑代码时,我不小心编辑了我的 url 定义,导致了这个错误。
url(r'^section/(P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$',
self.frontend_category_view.as_view(), name='frontend-category'),
应该是
url(r'^section/(?P<frontend_category_slug>[\w-]+(/[\w-]+)*)_(?P<pk>\d+)/$',
self.frontend_category_view.as_view(), name='frontend-category'),
(P 前缺少问号):
?P<frontend_category_slug>