我正在将 Django CMS 与 Django Parler 一起使用,并且遇到了一个让我发疯的问题,所以如果有人能提供帮助,将不胜感激!
所以我正在创建一个简单的博客应用程序,它将 slug 作为可翻译字段。这是简化的模型:
from parler.models import TranslatableModel, TranslatedFields
class Article(TranslatableModel):
...
translations = TranslatedFields(
...
slug = models.SlugField(_('slug'), max_length=255, blank=True, allow_unicode=True),
meta = {'unique_together': (('language_code', 'slug'),)}
)
...
def get_absolute_url(self):
return reverse('blog:article_detail', kwargs={'slug': self.slug})
以下是网址:
from django.conf.urls import include, url
from .views import ArticleDetailView
urlpatterns = [
...
url(r'^(?P<slug>\w[-\w]*)/$', ArticleDetailView.as_view(), name='article_detail'),
]
最后是视图:
from django.views.generic import DetailView
from parler.views import TranslatableSlugMixin
from .models import Article
class ArticleDetailView(TranslatableSlugMixin, DetailView):
model = Article
template_name = 'blog/_article.html'
我创建了一篇英文、法文和德文的文章,每种语言都有不同的 slug,我们称之为:
/en/blog/english-slug
/fr/blog/french-slug
/de/blog/german-slug
我可以正确导航到所有这些,但在 Django CMS 中,您在顶部有语言菜单,英语页面上的链接显示为:
/en/blog/english-slug
/fr/blog/english-slug
/de/blog/english-slug
这很好,因为这就是视图中的 TranslatableSlugMixin 处理的内容(请参见此处http://django-parler.readthedocs.io/en/latest/api/parler.views.html)。
因此,当我单击其中一个链接(比如法语链接)时,视图会正确找到正确的文章并将我重定向到正确的 url。所以点击:
/fr/blog/english-slug
正确地将我带到:
/fr/blog/french-slug
但这就是一切都出错的地方。我现在想导航回英文页面,显示为:
/en/blog/french-slug
但是,当我单击该链接时,它会导航到 404。如果我从法语 URL 导航到德语 URL,情况也是如此。但是,如果我立即从英语转到德语,它就可以工作。
抱歉,我知道这很难解释,但似乎翻译从基本/默认到其他语言的一种方式工作,但在语言之间交换或返回基本/默认时无法正常工作。
肯定 TranslatableSlugMixin 是为了让这种情况发生而设计的?!那么我在这里错过了什么吗?
任何帮助将非常感激。如有必要,很乐意提供更多信息。
谢谢