Django:片段或更好的解决方案的范围

时间:2018-03-07 17:49:29

标签: python django

我有以下模板:

{% extends "account/base.html" %}

{% load i18n %}
{% load account %}
{% load crispy_forms_tags %}

{% block head_title %}{% trans "Password Reset" %}{% endblock %}

{% block content %}
<div class="container">
  <div class="row justify-content-center">
    <div class="col-8">
      <h1>Reset your password</h1>
      {% if user.is_authenticated %}
      {% include "account/snippets/already_logged_in.html" %}
      {% endif %}

      <p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it." %}</p>

      <form method="POST" action="{% url 'account_reset_password' %}" class="password_reset">
          {% csrf_token %}
          {{ form|crispy }}
          <button type="submit" class="btn btn-primary">Reset My Password</button>
      </form>

      <p><em>{% blocktrans %}Please contact us if you have any trouble resetting your password.{% endblocktrans %}</em></p>
    </div>
  </div>
</div>
{% endblock %}

account / base.html包含此内容:

{% extends "base.html" %}

base.html然后包含标签等。我正在努力寻找最佳解决方案,同时考虑DRY。在我的模板中,我写道:

<div class="container">
  <div class="row justify-content-center">
     <div class="col-8">
     [more text]
     </div>
  </div>
</div>

我有几个这样的模板,而且每个模板我都在编写相同的内容......我现在想知道将这些打开/关闭div-tags包含在两个文件中然后添加

的正确解决方案
{% include "div-open.html" %}
[more text] 
{% include "div-closing.html" %}

或者有更好的解决方案吗?这感觉不对,这就是为什么我现在问你如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

我依赖于HTML重复是否应被视为DRY违规。我要包含自定义表单字段,而不是{% include 'simple_custom_field.html' with field=form.some_fied %}其中

<强> simple_custom_field.html

<input
    type="{{ field.field.widget.input_type }}"
    class="form-control {{ field.field.widget.attrs.class }} {{ class }}"
    id="{{ field.id_for_label }}"
    name="{{ field.html_name }}"
    placeholder="{{ field.label }}"
    {% if field.value is not None %} value="{{ field.value }}"{% endif %}>

或者那样......

是个好主意,或者如果您在多个文件中有长块或单独的HTML块,那么您也可以像这样呈现整个表单,然后去实现它。但它包含HTML的简单和基本部分是个坏主意。 程序员应该是透明的

如果你想以另一种方式做,有办法如何添加自定义模板标签和&#34;修改&#34;您编写模板的语言。 以下是文档如何执行此操作:Writing custom template tags | Django docs