Django模板:with中的可选变量

时间:2018-05-08 08:06:49

标签: django django-templates

这可能是一个非常简单的问题;但我似乎无法找到正确的'方法

我有一个模板,其中我包含了三次不同的模板。我传递了很多变量和include。问题是其中一个是可选的。

{% with
    title="Add object"
    type="function"
    function_type="FUNCTION"
    inputs=function_create_form
    project_id=project.id
    parent_function_id=root_function.id
    {% if root_function.type == 'OBJECT' %}
        parent_function_id=root_function.id
    {% endif %}
%}
    {% include "./popup-form.html" %}
{% endwith %}

(我知道这应该是模板中的一行,出于某种原因。但这更具可读性。)

它的要点是我只想传递if语句中的变量,如果它是正确的类型。它总是有一个值,但并不总是正确的值。可悲的是,Django似乎并不容忍with中的陈述。

为了澄清,如果变量的类型正确,则只应将变量传递给模板。包含的模板是用于添加对象的弹出窗体。这些对象有不同的类型;房间,对象和功能。这些对象又可以有一个父对象,这正是我想要传递的对象。但是,如果用户正在查看正确的对象类型,则只应将此父级传递给弹出窗体。这由if语句

决定

我也尝试过这样做,结果相同:

{% include "./popup-form.html" with
    title="Add object"
    type="function"
    function_type="OBJECT"
    inputs=function_create_form
    project_id=project.id
    {% if root_function.type == 'OBJECT' %}
        parent_function_id=root_function.id
    {% endif %}
%}

错误:'with' received an invalid token: '{%'

我或许可以在if之外创建一个with语句,并将变量的值设置为空字符串。但是应该有更好的方法,对吗?在view中执行此操作不是一种选择,因为变量始终需要具有值。

1 个答案:

答案 0 :(得分:1)

这句话的复杂性应该是一个线索,这是错误的方法。

如果要将多个变量传递给包含的模板,您可能应该查看Reactive Forms - mark fields as touched。然后,您可以使用位置和关键字参数的任意组合来呈现模板。