2009-04-03 5 views
8

여기 object_detail이라는 일반 뷰에서 reverse를 어떻게 사용합니까?일반보기의 역 URL을 얻는 방법은 무엇입니까?

/덧글/덧글/ 에서 NoReverseMatch ''with 'arguments'() '및 키워드 인수'{} '을 (를) 찾을 수 없습니다. views.py에서

:

urlresolvers.reverse('django.views.generic.list_detail.object_detail') 
       return HttpResponseRedirect(resp) 

urls.py

common_info_dict = { 
    'extra_context':{ 
     'blogtitle':"Thinking", 
     'blogsubtitle':"- blog system", 
     'articles_count':Entry.objects.count, 
     'comments_count': 0, 
     'visitors_count' : 0, 
     'category_list':Category.objects.all, 
     'tag_list':Tag.objects.all, 
     'comment_form': CommentForm, 
    }, 
} 

object_detail_info_dict = { 
    'queryset': Entry.objects.all(), 
    'slug_field': 'slug', 
    'template_object_name': 'post', 
} 

object_detail_info_dict.update(common_info_dict) 

    urlpatterns += patterns('django.views.generic.list_detail', 
     (r'^posts/(?P<slug>[-\w]+)/$', 'object_detail', object_detail_info_dict), 
    ) 

답변

18

일반적인 전망 리버스 사용할 수있는 유일한 방법 - named urls 설정합니다.

urlpatterns += patterns('django.views.generic.list_detail', 
    (r'^posts/(?P<slug>[-\w]+)/$', 'object_detail', 
          object_detail_info_dict, 'post_detail'), 
) 

reverse('post_detail', args=('foobar',)) 
3

이 질문은 이전 버전의 장고를위한 것 같습니다. 이전 일반 뷰가 작동하는 방식에 익숙하지 않습니다. 그러나 새로운 클래스 기반 제네릭 뷰에는 동일한 문제가 있습니다.

View.as_view()는 매번 다른 래퍼 함수를 ​​반환하고 서로 동일하지 않으므로 reverse()는 역방향을 찾을 수 없으므로 "기본적으로"작동하지 않습니다. 동등하지 않은 두 기능을 비교하여 경로를 지정하십시오.

비표준 임에도 불구하고 다른 방법이 있습니다. 이 경우

class OrderView(LoginRequiredMixin, CreateView): 
    model = Order 
    form_class = OrderForm 

OrderView.plain_view = staticmethod(OrderView.as_view()) 

, 내가 인수없이 as_view()에 의해 반환되는 뷰를 의미하는 plain_view를 사용 : 이것은 내가 내 클래스 기반 뷰를 위해 할 것입니다. 인수를 as_view()에 전달하면 반환하는 래퍼는 실제로 일반 래퍼와 다릅니다. 당신이 모두를 필요로한다면, 당신은 다른 속성에 할당해야 할 것 :

urlpatterns = patterns('', 
    url(r'^order/$', views.OrderView.plain_view), 
    url(r'^frob/$', views.OrderView.bonk_view), 

을 다음 당신은을 반대로하여이를 취소 할 수 있습니다 :

OrderView.plain_view = staticmethod(OrderView.as_view()) 
OrderView.bonk_view = staticmethod(OrderView.as_view(whee='bonk')) 

당신이보기에 연결할 수 urls.py 속성 보기 속성 :

:
def get_success_url(self): 
    return reverse(OrderView.plain_view) 

def get_failure_url(self): 
    return reverse(OrderView.bonk_view) 
+0

이 답변은 문제의 본질을 말해줍니다. – dspjm