2011-04-28 56 views

回答

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 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 

我从来没有见过这个功能,我怀疑很多人都让我觉得这一定指出进口是有用的。

+0

谢谢!这种机制看起来很麻烦并且很容易失败。网络上没有太多有关这样做的信息。当我完成时,我会小心并在这里张贴结果。 – Sergio 2011-04-28 18:36:28