2009-10-15 4 views
4

저는 장고 앱의 URL에 슬러그를 추가하려고합니다.Django - 어떻게 퍼머 링크를 "쓸모없는"슬러그로 작업 할 수 있습니까?

http://example.com/foo/123/ 

난과 같이 'slugified'URL을 추가 할 :

http://example.com/foo/123/foo-name-here 

내가 그것을 얻을 수

현재,이 같은 URL과 함께 잘 작동 페이지가 urlconf를 수정하고 뷰 기능에 값을 추가하면됩니다.

#urls.py 

ulpatterns = patterns('project.app.views', 
    url(r'^foo/(?P<foo_id>\d+)/(?P<name_slug>\w+)/$', 'foo_detail', name='foo_detail'), 
) 

#views.py: 

def foo_detail(request, foo_id, name_slug): 
    # stuff here, name slug is just discarded 

t 그는 슬러그가 잘 작동합니다.

그러나 내 문제는 내가 @models.permalink을 사용할 때입니다. 내 템플릿에 {{ foo.get_absolute_url }}를 호출 할 때마다

@models.permalink 
def get_absolute_url(self): 
    return ('foo_detail', [str(self.id),]) 

하지만, 내 변경 후, 결과는 항상 빈 문자열 : 내 Foo 모델의 경우

, 나는 잘 작동 다음을 가지고하는 데 사용됩니다. 내가 돌아 가기 전에 print slugify(self.name)를 추가 할 경우 slugified 이름이 잘 콘솔에 표시되는

from django.template.defaultfilters import slugify 

# attempt 1 
@models.permalink 
def get_absolute_url(self): 
    return ('foo_detail', [str(self.id), slugify(self.name)]) 

# attempt 2 
@models.permalink 
def get_absolute_url(self): 
    return ('foo_detail',(), { 
     'foo_id': str(self.id), 
     'name_slug': slugify(self.name), 
    }) 

참고 :

나는 노력하고 있습니다 어느 것도 get_absolute_url에 대한 다음과 같은 두 가지 교체를 시도했다.

내 템플릿에 {{ foo.get_absolute_url }}을 호출 할 때 결과는 항상 빈 문자열이며 오류가 발생하지 않습니다.

나는 return '/foo/%s/%s' % (str(self.id), slugify(self.name))으로 메소드를 대체 할 수 있지만, permalink가 작동하도록하여 URL이 한 곳에서만 정의되도록하려고합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

(?P<name_slug>\w+) 

이 slugify 어디 하이픈을 추가 : 나는이 문제에 달려 있기 때문에

+1

나는이 일을하는 방식이 이상하고 불필요하다는 것을 알아야한다 : urlconf 또는 view 함수에'name_slug'를 유지할 필요가 없다. 응답자가 내 문제를 지적한 후에 나는'r '^ foo/(? P \ d +)/([\ w -] +)/$''와'foo_detail (request, foo_id) :' 각각 청소기입니다. –

+0

어떤 퍼머 링크 방법을 사용 했습니까? 나는 똑같은 것을보고있다 ... – thornomad

+0

@thornomad 시도가 내 질문에 1 번으로 끝났다. 내 url 패턴을 가지고있는'get_absolute_url' 메소드에 문제가 없었습니다. –

답변

7

한 가지, 확인하는? 정규 표현식이 일치하지 않으면 hypens는 단어가 아닌 문자입니다. 사용을 수정하려면 [\w-]+ 또는 유사하게하십시오.

+0

아, 잘 잡았다, 예, slugify는 하이픈을 추가합니다. –

관련 문제