gpt4 book ai didi

python - 即时/动态创建模板

转载 作者:行者123 更新时间:2023-11-28 18:46:49 27 4
gpt4 key购买 nike

我目前正在围绕一个相当复杂的数据模型编写一个 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)

我找不到类似的东西,也不知道从哪里开始动态生成模板,也不知道如何集成它。

在 View 中感觉是一个很好的起点,(而不是 loader.get_template('static_template_case1.html'))。

如果 DRY 在这里“过头了”,感谢您向我提供正确方向的任何提示以及您的想法。

拉尔夫

编辑

我更近了一步,执行以下操作:

在 View 中:

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 传递给主模板。

关于python - 即时/动态创建模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com