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 %}
我想以不同于 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 %}