4

我想为 ModelAdmin 添加一个自定义 url,但似乎 Django 在 1.5 中更改了模板语法。正如文档指出的那样,我尝试了这种方式,但不幸的是它不起作用。

class VariableAdmin(admin.ModelAdmin):

    def get_urls(self):
         urls = super(VariableAdmin, self).get_urls()
         my_urls = patterns('',
                       url(r'^settings/([A-Za-z0-9]*)', self.admin_site.admin_view(self.settings), name="settings"))
         return my_urls + urls

    def settings(self, request, category):
         return render_to_response('variables.html', {"opts": Variable._meta}))

这是我的 variables.html

{% load admin_urls %}
{% url opts|admin_urlname:'settings' %}

此代码引发如下错误:

Reverse for 'common_variable_settings' with arguments '()' and keyword arguments '{}' not found.

我该如何解决这个问题?

4

1 回答 1

2

尝试更改视图名称以包含应用程序和模型名称:

...
my_urls = patterns('', url(r'^settings/([A-Za-z0-9]*)',
                   self.admin_site.admin_view(self.settings), 
                   name="common_variable_settings"))
...

模板过滤器admin_urlname返回“完整”名称,请参阅它的源代码:

@register.filter
def admin_urlname(value, arg):
    return 'admin:%s_%s_%s' % (value.app_label, value.module_name, arg)

所以绝对你需要命名 Your view "appname_modulename_settings"。也许然后尝试将正则表达式更改为如下所示:

r'^settings/([A-Za-z0-9]+/)?$'
于 2013-09-04T17:32:23.280 回答