1

我想获取我在 Django-CMS 应用程序中发布的所有页面的列表,但我似乎无法让它呈现特定于语言的 url。

在我指定的设置中:

LANGUAGES = [
    ('sv', 'Svenska'),
    ('en', 'English'),
]

我进入管理站点,创建一个联系页面(这不是站点主页)并在不同的语言上设置不同的 slug,例如“contact-sv”和“contact-en”。

然后我有一个获取页面的视图

from cms.models import Page
page = Page.objects.published()[1]
print 'swe:', page.get_absolute_url(language='sv')
print 'eng:', page.get_absolute_url(language='en')

然后我得到这个输出:

swe: /contact-en/
eng: /contact-en/

当我期望 swe-url 是 /sv/contact-sv/

我不需要路径的语言前缀,我可以将其添加到路径中,但我需要特定于语言的路径。

4

3 回答 3

2

我不能为您提供比等待 2.4 版本更好的解决方案,该版本将使用 Django 的内置 i18n_urlpatterns 来处理此问题,这应该可以解决您遇到的问题,目前,您的答案是唯一的出路。

于 2012-11-13T14:23:23.177 回答
0

我敢打赌有更好的方法来做到这一点,但现在我循环浏览页面对象上的标题。

for title in page.title_set.all():
    print title.language, title.slug

它有效,但我不喜欢它......

于 2012-11-10T00:39:08.917 回答
0

也许您可以使用站点地图策略。django cms 有它自己的站点地图类来运行这个代码:

class CMSSitemap(Sitemap):
    changefreq = "monthly"
    priority = 0.5

    def items(self):
        all_titles = Title.objects.public().filter(
            Q(redirect='') | Q(redirect__isnull=True),
            page__login_required=False,
            page__site=Site.objects.get_current(),
        ).order_by('page__path')
        return all_titles
于 2016-03-31T14:08:33.847 回答