据我从docs 了解到,默认情况下,django 1.5 中不支持prefix_default_language。所以要么你需要放弃使用它的想法,要么你需要自己实现它。如果选择后者,则需要创建一个新的i18n_patterns 函数,还需要在其中更新LocaleRegexURLResolver。例如:
from django.core.urlresolvers import LocaleRegexURLResolver
class CustomLocaleRegexURLResolver(LocaleRegexURLResolver):
def __init__(self, urlconf_name, default_kwargs=None, app_name=None, namespace=None, prefix_default_language=True):
self.prefix_default_language = prefix_default_language
super(LocaleRegexURLResolver, self).__init__(None, urlconf_name, default_kwargs, app_name, namespace)
@property
def regex(self):
language_code = get_language()
if language_code == settings.LANGUAGE_CODE and not self.prefix_default_language:
return re.compile('^')
if language_code not in self._regex_dict:
regex_compiled = re.compile('^%s/' % language_code, re.UNICODE)
self._regex_dict[language_code] = regex_compiled
return self._regex_dict[language_code]
现在,您需要在自定义i18n_patterns 中使用CustomLocaleRegexURLResolver,如下所示:
from django.conf import settings
from django.conf.urls import patterns, url
from django.core.urlresolvers import LocaleRegexURLResolver
def custom_i18n_patterns(prefix, *args, *kwargs):
prefix_default_language = kwargs.get('prefix_default_language', True)
pattern_list = patterns(prefix, *args)
if not settings.USE_I18N:
return pattern_list
return [CustomLocaleRegexURLResolver(pattern_list, prefix_default_language=prefix_default_language)]
最后,在你的 url 中使用这个:
urlpatterns += custom_i18n_patterns('',
url(r'^', include(app_urlpatterns)),
prefix_default_language=False
)
已经根据代码available here实现了。