2013-09-22 3 views
2

현재 다소 복잡한 데이터 모델을 중심으로 장고 응용 프로그램을 작성하고 있습니다. 많은 사용 사례를 위해 유사하지만 약간 다른 템플릿 (graphviz 등 포함)을 만들어야합니다. DRY를 따라 "즉시"템플릿을 만들 수있는 방법이 있는지즉시/동적으로 템플릿을 만듭니다.

는 지금은, 예를 들어, 궁금 중첩 된 튜플을 기반으로합니다 (이 중 하나는 유스 케이스별로 정의됩니다).

static_template_case1.html

{% if program %} 
    {{ program.name }} 
    {% for process in program.process_set.all %} 
     {{ process.name }} 
     {% for step in process.step_set.all %} 
      {{ step.name }} 
     {% endfor %} 
     {% for control in process.control_set.all %} 
      {{ control.name }} 
     {% endfor %} 
    {% endfor %} 
{% endif %} 

다음과 같은 방향으로 무언가로 대체 :

는 실제로 나는이를 작성 중지하고 싶은 말

template_generator.py

structure_case1 = ("program"("process"("step","control"))) 

def onTheFlyTemplate(structure): 
    # iterate through structure 
    # build template dynamically 
    # return template 

onTheFlyTemplate(structure_case1) 

나는 비슷한 것을 발견하지 못했고, 비행 중 템플릿을 생성 할 위치와 위치를 통합하는 방법도 아직 모릅니다. 뷰 내에서

은 (대신 loader.get_template('static_template_case1.html')의) 좋은 출발점 것 같은 느낌이 든다. DRY 여기에 "과장"인 경우 올바른 방향뿐만 아니라 당신의 생각으로 나를 보내는 어떤 힌트

감사합니다. 뷰에서

:

랄프

편집

나는 다음을 수행하는 걸음 더 가까이있어

from django.template import Template 
def templateGen(): 
    return Template("Program: {{program.count}}") 

@login_required 
def test(request): 
    program = Program.objects.all() 
    t = templateGen() 
    c = RequestContext(request,locals()) 
    return HttpResponse(t.render(c)) 

을 지금까지 개념의 증거입니다. 진짜 작업은 중첩 된 튜플을 청취하는 똑똑한 "templateGen()"을 작성하는 것입니다.

답변

1

포함 태그는 어떤가요?

@register.inclusion_tag('<your-template.html>') 
    def get_program(program_id): 
     return {'program': <some logic to return your Program object>} 

기본 템플릿 :

{%load my-template-tags%} 

<div id="my-div"> 
    {%get_program program_id %} 
</div> 

그리고 템플릿 파일 :

{{ program.name }} 
{% for process in program.process_set.all %} 
    {{ process.name }} 
    {% for step in process.step_set.all %} 
     {{ step.name }} 
    {% endfor %} 
    {% for control in process.control_set.all %} 
     {{ control.name }} 
    {% endfor %} 
{% endfor %} 

당신은 기본 템플릿에 program_id 전달해야 할 것이다.

+0

안녕하세요.하지만이 경우 템플릿 파일은 여전히 ​​정적입니다. 전체 데이터 모델의 하위 집합을 나타내는 중첩 구조 (튜플 또는 dict)를 기반으로 생성하려고합니다. 원본 게시물을 다음과 같이 수정 한 내용을 보니 그 사이에 한 걸음 가까이 다가 갔을 것 같습니다. – szeta

관련 문제