2011-06-12 7 views
0

이 주제는 계속적으로 생각하고 있습니다. this topic. 나는 일반적인 견해에서 반대의 문제로 돌아갔다. 지난 번에 많은 사람들을 많이 사용했기 때문에 반전 일치가 아니라고 생각 했었습니다. 이제 역으로 관계가 많지는 않지만 문제가 있습니다. 두 경우 모두에서 URL에 일반 뷰가 있으므로 일반 뷰와 뷰 기능이 문제가 아니라고 제안했습니다. 는 처음에는 모델에URL 일반보기 역순

... 
@permalink 
def get_absolute_url(self): 
    return ('categories', str(self.id)) 
... 
@permalink 
def get_absolute_url(self): 
    return ('pages',(), {'page_name': self.human_readable_url}) 

URL을

url(r'^(?P<page_name>&\w*)?/?$', direct_to_template, 
    {'template': 'basic.djhtml'}, 
    name = "pages"), 
url(r'cat/\d+/$', 
    direct_to_template, 
    {'template': 'basic.djhtml'}, 
    name = "categories") 

을 @permalink 장식을 사용하고 오류 가지고 :

NoReverseMatch: Reverse for 'pages' with arguments '()' and keyword arguments '{'page_name': u'page1'}' not found.

가 그럼 난 노력 역 방법을

def get_absolute_url(self): 
    return reverse('categories', args = [self.id, ]) 

그리고 h 명시 적으로 반대 방법을 사용하지 퍼머 사실을 바탕으로 동일한 오류

NoReverseMatch: Reverse for 'categories' with arguments '(2,)' and keyword arguments '{}' not found.

집결지, 나는 문제가 상호 작용 역 및 URL의 일반적인 관점에서 생각합니다. 왜 그런가? URL 일반보기에서 역방향을 사용하는 방법? 하지만 direct_to_template는 인수, 여분의 문맥을 포함하는 경우에만 사전을지지 않습니다 -

답변

1

문제는 당신이 일반적인보기 direct_to_template에 이름 categories을 준, 당신은 그보기에 인수를 전달하는 것이다.

추가 인수를 일반 뷰로 전달하려는 경우 - 그러나 템플릿에만 전달됩니다. 자신의 함수를 작성하여 extend the view을 작성하면 매개 변수가 사전에 추가 된 다음 일반 뷰가 호출됩니다. 이런 식으로 뭔가 : 당신의 urls.py에서 다음

# views.py 
from django.views.generic.simple import direct_to_template 

def my_view(id): 
    more_data = {'id': id} 
    return direct_to_template(template = 'basic.djhtml', more_data) 

그리고는 my_view으로 direct_to_template를 교체합니다. my_viewid 인수를 취하므로 reverse은이를 올바르게 일치시키고 인수는 일반 뷰로 전달되어 템플리트로 전달됩니다.

아마도 템플릿의 어딘가에 {{ id }}과 같은 행이있을 것입니다.