62

だから私は次のようなことをしたい:

{% if age > 18 %}
    {% with patient as p %}
{% else %}
    {% with patient.parent as p %}
    ...
{% endwith %}
{% endif %}

しかし、Django は別の {% endwith %} タグが必要だと言っています。これを機能させるためにwithを再配置する方法はありますか、それとも構文アナライザーはこの種のことに関して意図的に気楽です?

多分私はこれについて間違った方法で行っています。このようなことになると、ある種のベストプラクティスはありますか?

4

2 に答える 2

95

DRYのままにしたい場合は、インクルードを使用してください。

{% if foo %}
  {% with a as b %}
    {% include "snipet.html" %}
  {% endwith %} 
{% else %}
  {% with bar as b %}
    {% include "snipet.html" %}
  {% endwith %} 
{% endif %}

または、コア ロジックをカプセル化するモデルにメソッドを記述することをお勧めします。

def Patient(models.Model):
    ....
    def get_legally_responsible_party(self):
       if self.age > 18:
          return self
       else:
          return self.parent

次に、テンプレートで:

{% with patient.get_legally_responsible_party as p %}
  Do html stuff
{% endwith %} 

そして将来、誰が法的責任を負うかについてのロジックが変更された場合、ロジックを変更する場所は 1 か所しかありません。多数のテンプレートで if ステートメントを変更するよりもはるかに DRY です。

于 2011-08-16T16:54:55.613 に答える