Tornado 웹 서버 에서 공백 문 자 를 처리 하 는 솔 루 션

Tornado 템 플 릿 엔진 은 항상 구멍 이 있 습 니 다.가끔 은 정상 적 인 사용 에 영향 을 주지 않 는 다 고 생각 할 수도 있 지만 강박 증 은 참 을 수 없습니다.템 플 릿 은 줄 마다 앞 뒤의 빈 칸 을 제거 합 니 다.
마지막 으로 나 온 페이지 는 다음 과 같 습 니 다.
4.567916.들 어가 지 않 으 면 기분 에 정말 영향 을 줍 니 다.좋 습 니 다.특히 python 개발 자 에 게 는.
외국 의 일부 Q&A 는 이 상황 에 대해 서도 토론 이 있 는데 그 중에서 비교적 많이 언급 된 것 은 바로 copress 이다.whitespace。github 에서 issue 를 찾 았 습 니 다https://github.com/tornadoweb/tornado/issues/178공백 문 자 를 불평 하 는 문제 입 니 다.공백 문자 가
에서 제거 되 어 코드 태그'pre'에 문제 가 생 겼 습 니 다.
tornado 코드 를 봅 시다.이것 은 Template 류 의 구조 함수 입 니 다.

def __init__(self, template_string, name="<string>", loader=None,
             compress_whitespace=None, autoescape=_UNSET):
    self.name = name
    if compress_whitespace is None:
        compress_whitespace = name.endswith(".html") or \
            name.endswith(".js")
그 중 에 copress 가 있어 요.whitespace 인자,name(템 플 릿 주소)이.html 또는.js 로 끝 날 때 copress화이트 스페이스 진짜.
실제로 마지막 으로 generate 함수 에서 빈 칸 을 처리 하 는 코드:

if writer.compress_whitespace and "<pre>" not in value:
    value = re.sub(r"([\t ]+)", " ", value)
    value = re.sub(r"(\s*
\s*)", "
", value)
압축whitespace 가 진짜 이 고 html 에'pre'가 없 을 때 이 if 문 구 를 들 어 갑 니 다."
"이 건 위 에 있 는 그 문 제 를 해결 하 는 데 쓰 일 것 같 지만 분명히 pythonic 이 아 닌 방식 입 니 다."
한 번 의 분석 을 통 해 알 수 있 듯 이 이런 방법 은'들 여 쓰기'가 제거 되 는 것 을 피 할 수 있다.
1.Template 의 구조 함수 에 copress 가 들 어 옵 니 다.whitespace=False。
2.템 플 릿 에"pre"를 추가 합 니 다.
3.템 플 릿 파일 은.html 또는.js 접미사 가 아니 라.htm 또는.tpl 등 이 될 수 있 습 니 다.
4.핵심 라 이브 러 리 코드 수정.
두 번 째 방법 은 틀림없이 최 악이 다.들 여 쓰기 문 제 를 위해 템 플 릿 을 고 칠 수 는 없다.세 번 째 방법 은 하나의 저울질 의 계산 이 라 고 할 수 있 습 니 다.번 거 로 움 을 해결 하 는 것 이 아니 라 제 스타일 이 아 닙 니 다.그리고 접 두 사 는 편집기 의 코드 하 이 라이트 와 코드 보완 에 영향 을 줍 니 다.첫 번 째 방법 은 가장 좋 은 것 같 지만,실제로 컨트롤 러 에서 템 플 릿 을 호출 하 는 것 은 render()나 render 를 사용 하 는 것 입 니 다.string()에서 만 들 었 습 니 다.이 두 함 수 는 Template 대상 의 생 성 과정 을 봉 인 했 습 니 다.우 리 는 Template 의 구조 함 수 를 전혀 접 할 수 없 기 때문에 copress 를 제어 할 수 없습니다.whitespace 의 값 입 니 다.
그래서 코드 가 pythonic 이 될 수 있 도록 공식 적 으로 수정 할 수 있 기 를 바 랍 니 다.
나 는 여기 서 네 번 째 방법 으로 Tornado 핵심 코드 를 직접 수정 하여 이 몇 마디 의 주석 을 지 웠 다.

좋은 웹페이지 즐겨찾기