2013-11-26 2 views
2

나는이 문제에 갇혀 비트하니 정의 :장고는 slugify - 독일어 움라우트

우리 모두가 알고는, 장고는 Träume von Bücher에서 traume-von-bucher을 만드는 slugify 템플릿 태그가 있습니다.

그러나 구문적으로 Träume은 올바른 독일어 단어가 될 Traeume이되어야합니다.

내 맞춤 태그를 작성하여 ÄAe으로 슬라브되도록하려면 어떻게해야합니까?

+0

나는 그것을 찾았습니다 : https://docs.djangoproject.com/en/1.4/howto/custom-template-tags/ – doniyor

+0

'slugify'는 실제로는 필터가 아닌 태그입니다. 따라서 적절한 움푹 들어간 부분을 대체 할 필요가 있다면 – twil

답변

4
from django import template 
from django.template.defaultfilters import stringfilter 
from django.utils.text import slugify 

register = template.Library() 

@register.filter 
@stringfilter 
def germanslugify(value): 
    replacements = [(u'ä', u'ae')] 
    for (s, r) in replacements: 
      value = value.replace(s, r) 
    return slugify(value) 
+0

섹션을 찾으십시오. ''[(u'ä ', u'ae'), (u'ö ', u'oe'), (u'ü ', u'ue')]''할 수 있습니까? – doniyor

+0

그래, 저기에 거기에 목록이 있어요 :) – beerbajay

1

그냥 답변에 추가하려면 beerbajay.

내가 전체 응용 프로그램 의 기본 slugify 변경을 원 바로 slugify 전화를 수정/서브 클래스 모두를 포크 할 필요없이 (기본 구현은 노르웨이 문자 'O'와 'æ'를 떼어 내고).

그래서 나는 그것을 안으로 monkeypatch하기로 결정했다. 사용자 정의 slugify가 beerbajay 예제와 같이 구현되고 원래의 slugify를 호출하는 것만 큼 그렇게하는 것이 안전해야한다. 출력에 대한 가정이 깨지지 않도록하십시오.

여기 내가이 monkeypatching 코드를 포함하는 응용 프로그램을 작성 (장고 1.7에서 테스트하지만 아마 너무 이전 버전에서 작동)

것이 한 방법이 예에서는 monkeys을했다. 그것은 다른 모든 전에 앱을 실행할 수 있도록 설치된 앱에 먼저 추가 :

import django.template.defaultfilters 
from where.you.defined.it import custom_slugify 
#print "MONKEY PATCHING NOW!" 
#Uncomment the above to verify that this code actually called 
django.template.defaultfilters.slugify = custom_slugify 

만큼 모든 응용 프로그램이 django.template를 사용

INSTALLED_APPS = (
    'monkeys', # The monkey patches app 
    #... all the other apps below here 

monkeys/__init__.py 파일에서하면이 코드를 추가 .defaultfilters.slugify 이것이 작동해야하는 슬러그를 만드십시오.

+0

당신은 또한 자신의 쓸 필요가 없습니다 유니 코드 - slugify를 사용할 수 있습니다. https://github.com/mozilla/unicode-sugify –