2011-08-31 8 views
3

인 사용자 정의 Django 관리 사이트 내 URL 패턴은 다음과 같습니다 : (r '^ fb/custom/(? P [a-zA-Z0-9 +] *)/admin /', include (custom_admin_site 나는 인덱스처럼보기 방법에서 있었던 파라미터의 custom_ID를 필요하지 않습니다부모 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) 

이 방법 : .urls)),

나는 내 관리자 사이트의 admin_view 메도을 무효화한다. 내 문제는 내가 urlresolvers.reverse ('custom-admin : index')를 사용할 수 없다는 것입니다.

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

확인없이 깜짝 : 나는 매개 변수없이 사용하는 경우 난이 오류가 발생합니다. custom_id 매개 변수를 제공하지 않았습니다. 그러나 매개 변수가 있으면이 오류가 발생합니다.

reverse() got an unexpected keyword argument 'custom_id' 

이 문제를 해결하는 방법에 대해 알고 싶습니다. 역방향 조회를 사용하고 싶습니다. URL 템플릿 태그에도 동일한 문제가 있습니다. 당신의 URL 패턴과

답변

0

몇 가지 문제 :

  1. 당신이 당신이 * + 대신 사용해야합니다 (난 당신이하지 않은 거라 생각) 사용자 정의 ID의 빈 문자열과 일치하는 것을 시도하지 않는.
  2. + 기호는 대괄호 밖으로 이동해야합니다.
  3. 문자와 숫자를 일치시키려는 경우 정규식을 [\ w] +
  4. 으로 단순화 할 수 있습니다. 마지막으로 사용자 정의 ID의 명명 된 인수를 원하면 패턴에 이름을 포함시켜야합니다.

그래서 궁극적으로 당신의 URL을 후두둑은 다음과 같아야합니다

(r'^fb/custom/(?P<custom_id>[\w]+)/admin/', include(custom_admin_site.urls)), 

을 지금은 당신이 urlresolvers.reverse 전화하려고하는 방법을 잘 모르겠어요,하지만 당신은 인수 또는 kwargs로 전달해야하는 경우 그것은 뭔가 이들 중 하나 같이한다 : 같은 패턴으로,

urlresolvers.reverse('custom-admin:index', args=[custom_id]) 

또는 kwargs로 내가 위에서 포함 :

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