2010-05-27 6 views
0

이렇게 urlize 필터를 사용할 수 있습니까? :이렇게 urlize 필터를 사용할 수 있습니까?

from django.utils.html import urlize 

def save(self, force_insert=False, force_update=False): 
    self.body = urlize(self.body) 
    super(Post, self).save(force_insert, force_update) 

본문은 TextField입니다.

답변

1

구문이 answer로 간주되는 한 해당 스 니펫이 작동하는지 묻는 경우 서버 500 오류가 발생하지 않아야합니다.

그러나, urlize에 대한 설명서는 말한다, 내가 인용 : urlize 이미 HTML 마크 업을 포함 텍스트에 적용하면 예상대로 상황이 작동하지 않습니다

하는 것으로. 일반 텍스트에만이 필터를 적용하십시오.

개체가 처음 만들어 질 때 콘텐츠가 일반 텍스트라고 가정하면 모든 것이 잘됩니다.

기존 개체를 편집 할 때 save으로 전화하면이 시점에서 일반 텍스트가 아닌 body 콘텐츠의 콘텐츠에 urlize 필터가 다시 적용됩니다.

올바른 형식의 HTML 링크 만 콘텐츠에 사용되는 경우 심각한 슬픔을 느끼지는 않지만, 문서에서는 urlize에 대한 일반 텍스트 만 사용해야한다고 제안 할 수 있습니다.

당신은 MLStripper class from activestate를 사용하여 urlize 예를 들어 urlize를 호출하기 전에 각 시간에 삽입 된 HTML을 제거 할 수

: 적어도 이론적으로

from somelib import MLStripper 
def save(self, force_insert=False, force_update=False): 
    html_stripper = MLStripper() 
    html_stripper.feed(self.body) 
    self.body = urlize(html_stripper.get_fed_data()) 
    super(Post, self).save(force_insert, force_update) 

...

당신은 정말 어떻게해야

왜,하지 않는 한 모델에서 템플릿 필터를 사용하는 매우 중요한 이유는 템플릿에 urlize을 사용하는 것입니다. 예를 들면 다음과 같습니다.

{{ object.body|urlize }} 
+0

예 템플릿에서 urlize를 사용하고 싶었지만 더 나은 성능을 위해 태그없이 (2 TextField에서) 태그없이 본문을 저장하는 편리한 django (django에 대한 확실한 안내서)에 대한 책을 읽었습니다. - \ – xRobot

+0

퍼포먼스상의 이유로 두 개의 필드를 사용하는 것은 많은 텍스트 본문에 대해 베네딕 투스가되지만, 텍스트가 성능 손실을 야기 할만큼 충분히 크다면 데이터를 처리하는 방식을 재고해야합니다. 예를 들어, 텍스트 편집기를 사용하여 텍스트를 데이터베이스에 저장하기 전에 사용자가 링크를 정의 할 수 있습니다. 또한 나는 장고에 대한 확실한 안내서에서'urlize'에 대한이 참조를 찾는 데 어려움을 겪고 있습니다. –

관련 문제