【问题标题】:How to reverse a custom admin url in Django 1.5?如何在 Django 1.5 中反转自定义管理 url?
【发布时间】:2013-09-07 22:27:25
【问题描述】:

我想为 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.

我该如何解决这个问题?

【问题讨论】:

    标签: python django django-admin django-urls


    【解决方案1】:

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

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

    因此,您绝对需要将您的视图命名为"appname_modulename_settings"。也许然后尝试将正则表达式更改为这样的:

    r'^settings/([A-Za-z0-9]+/)?$'
    

    【讨论】:

    • 其实我试过这种方式,但没有奏效。我认为这不是预期的行为。
    • 编辑了我的答案,希望对您有所帮助!
    猜你喜欢
    • 2017-11-01
    • 2011-11-28
    • 2021-06-07
    • 2013-02-16
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多