[英]create templates on the fly / dynamically
我目前正在圍繞一個相當復雜的數據模型編寫一個django應用程序。 對於許多用例,我需要構建類似但略有不同的模板(包括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()”來監聽嵌套的元組。
包含標簽怎么樣?
@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傳遞給主模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.