Django管理站点重命名URL以匹配我的语言

时间:2011-04-28 17:27:08

标签: django url internationalization django-admin

我想自定义管理网站的网址,以便以我的母语(西班牙语)显示。我想要的是使用/ nuevo而不是/ add等。这可能吗?

1 个答案:

答案 0 :(得分:1)

我认为这会做你想要的。 ModelAdmin.get_urls()
但问题是,如何将新网址连接到admin视图?

默认get_urls()位于django/contrib/admin/options.py,并且它有一些复杂的代码来生成默认网址。

 def get_urls(self):
    from django.conf.urls.defaults import patterns, url

    def wrap(view):
        def wrapper(*args, **kwargs):
            return self.admin_site.admin_view(view)(*args, **kwargs)
        return update_wrapper(wrapper, view)

    info = self.model._meta.app_label, self.model._meta.module_name

    urlpatterns = patterns('',
        url(r'^$',
            wrap(self.changelist_view),
            name='%s_%s_changelist' % info),
        url(r'^add/$',
            wrap(self.add_view),
            name='%s_%s_add' % info),
        url(r'^(.+)/history/$',
            wrap(self.history_view),
            name='%s_%s_history' % info),
        url(r'^(.+)/delete/$',
            wrap(self.delete_view),
            name='%s_%s_delete' % info),
        url(r'^(.+)/$',
            wrap(self.change_view),
            name='%s_%s_change' % info),
    )
    return urlpatterns

我要做的是在每个ModelAdmin中使用此功能,但将网址文本更改为您的语言等效文字。

在您的示例中,add/看起来像这样:

url(r'^nuevo/$',
    wrap(self.add_view),
    name='%s_%s_add' % info)

请注意,我用英语留下了%s_%s_add

您可以包装此函数,这样就不必在每个ModelAdmin类中包含整个内容。

修改
该代码使用名为update_wrapper的函数,其导入方式如下:

from django.utils.functional import update_wrapper

之前我没见过这个功能,我怀疑很多人都这么认为我认为指出导入是有用的。