문제

Django 템플릿에서 다음을 수행하려고합니다.

    {% for embed in embeds %}
           {% embed2 = embed.replace("&lt;", "<") %}
           {{embed2}}<br />
    {% endfor %}

그러나, 나는 그런 일을 할 때 항상 유효하지 않은 블록 또는 구문 오류가 발생합니다 (루프 내부의 { % %} 코드를 의미 함). Python은 "범위"를 나타내는 {}가 없으므로 이것이 내 문제라고 생각합니까? 코드를 잘못 포맷하고 있습니까?

편집 : 정확한 오류는 다음과 같습니다. Invalid block tag: 'embed2'

EDIT2 : 누군가 내가하고있는 일이 Django Templates에서 지원하지 않는다고 말했기 때문에 코드를 다시 작성하여 논리를 뷰에 넣습니다. 나는 지금 가지고있다 :

embed_list = []
for embed in embeds:
    embed_list[len(embed_list):] = [embed.replace("&lt;", "<")] #this is line 35
return render_to_response("scanvideos.html", {
    "embed_list" :embed_list
})

그러나 이제 오류가 발생합니다. 'NoneType' object is not callable" on line 35.

도움이 되었습니까?

해결책

슬라이스 할당을 사용하여 목록을 키우는 대신

embed_list[len(embed_list):] = [foo]

당신은 아마 그냥해야합니다

embed_list.append(foo)

그러나 실제로 당신은 직접 수행하기보다는 라이브러리 기능으로 HTML을 사용하지 않아야합니다.

이 비에 타이프 오류는 embed.replace와 같은 소리로 들리며, 목록은 문자열 목록이 아닌 경우에만 의미가 있습니다. 일부 어설 팅이나 비슷한 것을 두 번 확인할 수 있습니다.

다른 팁

Django 템플릿이이를 지원하지 않는다고 확신합니다. 교체 작업을 위해 다른 필터를 살펴 보겠습니다.

당신은 실제로 템플릿이 아닌 당신의 견해에서 가능한 많은 논리를 유지하려고 노력해야합니다.

Django의 템플릿 언어는 의도적으로 호소합니다. 프로그래밍하지 않는 디자이너가 사용하면 확실히 좋은 일이지만 시간이 있습니다. 필요 약간의 프로그래밍을 수행합니다. (아니요, 나는 그것에 대해 논쟁하고 싶지 않습니다. 이것은 Django-Users와 Django-Dev에서 여러 번 나타났습니다.)

당신이 시도한 것을 달성하는 두 가지 방법 :

  • 다른 템플릿 엔진을 사용하십시오. 보다 Jinja2 Django와 통합하기 위해 완전히 설명되는 좋은 예를 위해.
  • 파이썬 표현식을 수행 할 수있는 템플릿 태그를 사용하십시오. 보다 리모 두의 expr 태그.

나는 여러 곳에서 expr 태그를 사용했고 그것은 생명을 만들었습니다. 많이 더 쉬운. 다음 주요 Django 사이트는 Jinja2를 사용합니다.

왜 "비에 타이프 객체가 호출 할 수 없다"는 이유가 모르겠습니다. 그것은 줄 어딘가에 "foo (...)"와 같은 표현이라는 것을 의미하며, Foo가 없음을 의미합니다.

BTW : ENDED_LIST를 확장하려고 노력하고 있으며 다음과 같이 쉽게 수행하는 것이 더 쉽습니다.

embed_list = []
for embed in embeds:
    embed_list.append(embed.replace("&lt;", "<")) #this is line 35
return render_to_response("scanvideos.html", {"embed_list":embed_list})

목록 이해력을 사용하기가 더 쉽습니다.

embed_list = [embed.replace("&lt;", "<") for embed in embeds]

Django 템플릿은 마음에 들지 않고 자체 구문을 사용합니다 어린이 또는 젠지.

당신은 당신 자신을 굴려야합니다 사용자 정의 템플릿 태그.

주된 이유는 모범 사례를 시행하는 것입니다. 제 경우에는 이미 팀의 디자이너에게 특수 템플릿 태그를 설명하는 데 어려움을 겪고 있습니다. 그것이 평범한 파이썬이라면 나는 우리가 Django를 전혀 선택하지 않았을 것이라고 확신합니다. 성능 문제도 있다고 생각합니다. Django Templates 벤치 마크는 빠르며 지난번에 Genshi가 훨씬 느 렸습니다. 그래도 자유롭게 내장 된 파이썬 때문인지 모르겠습니다.

접근 방식을 검토하고 자신의 사용자 정의 템플릿 (Ruby on Rails에서 "도우미"에 대해 다소 동의어)을 작성하거나 다른 템플릿 엔진을 사용해야합니다.

편집에는 Python에 더 나은 구문이 있습니다.

embed_list.append(embed.replace("&lt;", "<"))

나는 그것이 당신의 오류를 고칠지 모르겠지만 적어도 그것은 javaScriptesque입니다 ;-)

편집 2 : Django는 모든 변수를 자동으로 탈출합니다. | 안전 필터로 RAW HTML을 시행 할 수 있습니다. {{embed|safe}}.

문서를 읽는 데 시간이 걸리는 것이 좋습니다. 정말 훌륭하고 유용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top