Django,打印字段键的最佳方式

Django, best way to print a field key

我想以不同于 first_name 的方式打印模型的字段 我想打印类似 "key: value" 的内容,但它打印的是 "first_name: Georges",我更希望它看起来像 "First name: Georges"

目前我正在使用一个名为 form.html 的文件,我将其包含在每个表单模板中:

{% load widget_tweaks %}

{% for field in form %}
  <div class="form-group">
    {{ field.label_tag }}

    {% if form.is_bound %}
      {% if field.errors %}
        {% render_field field class="form-control is-invalid" %}
        {% for error in field.errors %}
          <div class="invalid-feedback">
            {{ error }}
          </div>
        {% endfor %}
      {% else %}
        {% render_field field class="form-control is-valid" %}
      {% endif %}
    {% else %}
      {% render_field field class="form-control" %}
    {% endif %}

    {% if field.help_text %}
      <small class="form-text text-muted">
        {{ field.help_text }}
      </small>
    {% endif %}
  </div>
{% endfor %}

还有一个看起来像这样的模型:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

将 first_name 打印为 "First name" 的最佳方法是什么?:

是否通过为 models.py 中的每个字段设置 verbose_name?

或者通过在 forms.py 中为每个表单中的每个字段设置标签?

或者不使用动态模板并在我的 form.html 中对其进行硬编码?

就像Aleksei Maide所说的改变你需要改变标签,这里是一个例子:

在您的表单中 class 添加一个方法:

def __init__(self, *args, **kwargs):
        super(YourFormName, self).__init__(*args, **kwargs)
        self.fields['first_name'].label = "First name"

这就是我在模板中的显示方式:

<label class="bmd-label-static">{{ field.label }}</label>
{{ field.name }}

想一想,您有一个包含 30 个字段的模型表单,而作为这个表单,您还有另外 30 个模型表单,现在,您必须每次设置字段标签,这是一项非常复杂的工作,你不觉得吗?

我可以建议您对每个模型字段使用 详细名称 功能并构建一个简单的模板标签,它可以帮助您动态地获得您的字段的详细名称模板

此模板标签将尝试获取模型字段的详细名称

# yourapp/templatetags/yourapp_extras.py
from django import template

register = template.Library()

@register.simple_tag
def field_name(model, field):
    field_name = field

    if model:
        try:
            field_name = model._meta.get_field(field).verbose_name.title()
        except Exception as ex:
            print ex
    return field_name

并且在您的模板中,您可以如下显示您的字段标签

# sometemplate.html
{% load widget_tweaks %}
{% load yourapp_extras %}

{% for field in form %}
  <div class="form-group">
    {% field_name model field.name %} <!-- here -->

    {% if form.is_bound %}
      {% if field.errors %}
        {% render_field field class="form-control is-invalid" %}
        {% for error in field.errors %}
          <div class="invalid-feedback">
            {{ error }}
          </div>
        {% endfor %}
      {% else %}
        {% render_field field class="form-control is-valid" %}
      {% endif %}
    {% else %}
      {% render_field field class="form-control" %}
    {% endif %}

    {% if field.help_text %}
      <small class="form-text text-muted">
        {{ field.help_text }}
      </small>
    {% endif %}
  </div>
{% endfor %}