带有父url参数的自定义Django管理站点

带有父url参数的自定义Django管理站点,django,url,design-patterns,admin,reverse,Django,Url,Design Patterns,Admin,Reverse,我的url模式如下所示: (r'^fb/custom/(?P[a-zA-Z0-9+]*)/admin/,包括(custom_admin_site.url)) 我覆盖了我的管理站点的管理视图方法: def admin_view(self, view, cacheable=False): def inner(request, *args, **kwargs): if kwargs.has_key('custom_id'): request.custom

我的url模式如下所示: (r'^fb/custom/(?P[a-zA-Z0-9+]*)/admin/,包括(custom_admin_site.url))

我覆盖了我的管理站点的管理视图方法:

def admin_view(self, view, cacheable=False):
    def inner(request, *args, **kwargs):
        if kwargs.has_key('custom_id'):
            request.custom_id = kwargs.pop('custom_id')
        return view(request, *args, **kwargs)
    if not cacheable:
        inner = never_cache(inner)
    # We add csrf_protect here so this function can be used as a utility
    # function for any view, without having to repeat 'csrf_protect'.
    if not getattr(view, 'csrf_exempt', False):
        inner = csrf_protect(inner)
    return update_wrapper(inner, view)
这样我就不需要像index这样的视图方法中的参数custom_id。我的问题是我不能使用urlResolver.reverse('custom-admin:index')。 如果我在没有参数的情况下使用它,则会出现以下错误:

Page not found. Request URL:    http://localhost:8000/fb/custom/(?P%3Ccustom_id%3E[a-zA-Z0-9%5C+]*)/admin/
reverse() got an unexpected keyword argument 'custom_id'
好的,不奇怪。我没有提供参数custom_id。但是使用该参数,我得到以下错误:

Page not found. Request URL:    http://localhost:8000/fb/custom/(?P%3Ccustom_id%3E[a-zA-Z0-9%5C+]*)/admin/
reverse() got an unexpected keyword argument 'custom_id'

你知道怎么解决这个问题吗。我真的很想使用反向查找。url模板标记也有同样的问题。

您的url模式存在一些问题:

  • 除非您试图为自定义id匹配空字符串(我猜您不是),否则您应该使用+而不是*
  • +符号应该在括号外
  • 如果您只是尝试匹配字母和数字,您的正则表达式可以简化为[\w]+
  • 最后,如果需要自定义id的命名参数,则必须在模式中包含该名称 因此,最终,您的url模式应该如下所示:

    (r'^fb/custom/(?P<custom_id>[\w]+)/admin/', include(custom_admin_site.urls)),
    
    或对于kwargs,如上面包含的模式I:

    urlresolvers.reverse('custom-admin:index', kwargs={'custom_id':custom_id})