【问题标题】:URL rendered as home_page after internationalization国际化后呈现为主页的 URL
【发布时间】:2017-11-14 02:06:45
【问题描述】:

我有一个想要国际化的 Django 网站。到目前为止,它看起来像这样:

主页:

  • www.myhomepage.com

另一页:

  • www.myhomepage.com/content/cities

现在我正在尝试这样:

主页:

  • www.myhomepage.com/en

  • www.myhomepage.com/de

另一页:

  • www.myhomepage.com/en/content/cities

  • www.myhomepage.com/de/content/cities


thisthis 之后,我设法使主页正常工作,所以www.myhomepage.com/en 我看到的是英文主页,www.myhomepage.com/de 我看到的是德文主页。

当我想转到任何其他页面时出现问题,例如www.myhomepage.com/en/content/cities。然后,呈现的页面仍然是主页。在更改任何设置以使其国际化之前,www.myhomepage.com/content/cities 已正确显示。

我的猜测是问题出在视图渲染或 url 上,但我无法让它工作。 请注意,www.myhomepage.com 的视图属于一个应用,content/cities 的视图属于另一个应用。


这是我的代码:

settings.py

MIDDLEWARE_CLASSES = [
    ...
    'django.middleware.locale.LocaleMiddleware',
    ...
]

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'django.template.context_processors.i18n',
            ],
        },
    },
]

from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
    ('en', _('English')),
    ('de', _('German')),
)

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

LANGUAGE_CODE = 'en-us'

USE_I18N = True

主应用:

urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

urlpatterns += i18n_patterns('',
    url(r'^content/', include('content.urls', namespace='content')),
)

views.py

from django.shortcuts import render

def home_view(request):

    ...

    context = {
                ...
    }

    #print('request home', request)

    return render(request, 'home_template.html', context)

通过激活打印语句并加载www.myhomepage.com/en/content/cities,在控制台中打印以下内容:request home: <WSGIRequest: GET '/en/content/cities/'>,即使此视图属于主页。

内容应用:

urls.py

from .views import countries_and_cities

urlpatterns = [
    ...
    url(r'^cities/$', countries_and_cities),
    ...
]

views.py

from django.shortcuts import render

def countries_and_cities(request):

    ...

    context = {
                ...
    }

    return render(request, 'cities_template.html', context)

我也尝试了docs中的建议,但没有成功。

urls.py 来自主应用:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

from content import views as content_views
content_patterns = ([
    url(r'^cities/$', content_views.countries_and_cities, name='cities'),
], 'content')

urlpatterns += i18n_patterns('',
    url(r'^content/', include(content_patterns, namespace='content')),
)

我做错了什么?

【问题讨论】:

    标签: django internationalization django-views django-urls django-i18n


    【解决方案1】:

    我终于找到了问题。

    还有一个 url 定义为:

    urlpatterns += i18n_patterns(
        ...
        url(r'', include('main.urls')),
        ...
        )
    

    这是导致问题的原因,即使在进行国际化之前它工作正常。

    我刚刚改成:

    urlpatterns += i18n_patterns(
        ...
        url(r'^$', include('main.urls')),
        ...
        )
    

    而且它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多