Администратор сайта Django переименовывает URL в соответствии с моим языком - PullRequest
1 голос
/ 28 апреля 2011

Я хотел бы настроить URL-адреса для сайта администратора, чтобы они отображались на моем родном языке (испанском).Я хочу использовать / nuevo вместо / add и так далее.Возможно ли это?

1 Ответ

1 голос
/ 28 апреля 2011

Я думаю, что это будет делать то, что вы хотите. ModelAdmin.get_urls ()
Но проблема будет в том, как подключить новый URL к представлению admin?

Значение по умолчанию get_urls() находится в django/contrib/admin/options.py, и в нем есть несколько сложный код для генерации URL-адресов по умолчанию.

 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 s, но измените текст URL на ваш языковой эквивалент.

В вашем примере 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

Я не видел эту функцию раньше, и я сомневаюсь, что многие люди видели это, поэтому я подумал, что было бы полезно указать на импорт.

...