2014-01-29 6 views
1

플라스크 (Flask)와 피어 오브 옴 (orewow)이 뒷받침하는 아주 간단한 블로그 사이트가 있습니다. 게시물 및 이미지 만 (점수를 매기십시오). 이미지에는 이미지 파일 (분명히), 제목 및 간단한 설명이 있습니다. 필터 또는 태그 등을 추가하고 기본적으로 {{ img.id|3 }}과 같은 게시물을 내 마크 다운하고 id=3의 이미지를 div의 제목 및 설명과 함께 렌더링합니까?플라스크 렌더 이미지 (및 데이터)

답변

4

매크로와 파이썬 함수를 사용하여 만들 수 있습니다.

먼저 글로벌 템플릿을 추가하십시오.

@app.template_global() 
def get_image(id): 
    # not sure if this is the way to do it with peewee 
    return Image.select().where(Image.id == id).get() 

이렇게하면 {{ get_image(id=3) }}으로 전화하여 이미지 개체를 얻을 수 있습니다. 물론, 그것은 여전히 ​​당신의 문제를 해결하지 못합니다.

원하는 방식으로 HTML을 생성하려면 Jinja2 매크로를 만들어 HTML 블록을 생성하십시오.

{% macro img(id) %} 
    {% set obj = get_image(id) %} {# here I'm calling the template global function #} 
    <img src="{{ obj.url }}" /> 
    <span class="title">{{ obj.title }}</span> 
    <span class="description">{{ obj.description }}</span> 
{% endmacro %} 

지금, 당신은 매크로 img에서 HTML을 인쇄 할 {{ img(id=3) }} 또는 {{ img(3) }}를 호출 할 수 있습니다.

여기서는 url, titledescription으로 개체를 가정합니다. 이미지를 게재 할 경로가 있다면 아마도 {{ obj.url }} 대신 url_for('some_route', id=id)과 같은 것이 될 것입니다.

물론 get_image 함수에서 HTML을 제공하거나 매크로에서 데이터베이스를 쿼리 할 수도 있습니다.하지만이 방법으로 문제를 구분했습니다.

+0

내가 필요한 것. 감사합니다. – freethrow

+0

이 코드를 사용하여 이미지를 표시 할 수 없습니다. "3.jpg"는 그 위치에 있어야합니까? – Gank

1

Jinja2의 경우 template_filter과 함께 자신의 필터를 추가 할 수 있습니다. 필터는 매개 변수를 사용할 수 있습니다.

이미 링크 속성이있는 템플릿에 이미지 개체가있는 경우이 속성을 사용하는 것이 좋습니다.

이 이미지에 대한 특수 경로가있는 경우 지정된 인수가있는 url_for을 사용하는 것이 좋습니다. 인수가 많은 경우 사용자 정의 필터를 항상 추가 할 수 있습니다.