【问题标题】:Django - how to override form template tag in htmlDjango - 如何覆盖html中的表单模板标签
【发布时间】:2015-04-23 07:27:18
【问题描述】:

我正在从事非英语的项目。我在注册的时候遇到了一个小问题。

在我的注册 html 中我有:

...
<form action="" style="text-align: center" method="POST">{% csrf_token %}
<ul style = "text-align: left">
{{user_form.as_p}}
</ul>
<input type="submit" value="Užsiregistruoti" onclick="validateForm()"/>

</form>
...

现在文本默认为英文。 {{user_form.as_p}} 从我的 forms.py 中获取值:

...
fields = ('username', 'password1', 'password2')
...

有没有办法保持表单值不变,并用我自己的语言重写 html 部分?我怎么做?我不能只获取生成的 html 部分并翻译它,它不会那样工作。

【问题讨论】:

  • 你的意思是“{{user_form.as_p}}”,你想用你自己的语言写。
  • 您需要为此启用 Django 的 I18N 功能。这是一个有点广泛的话题,但很好documented here。基本设置完成后,您可以将表单上的标签翻译成设置中设置的任何语言。以一种形式,例如比如your_name = forms.CharField(label=_('Your name'), max_length=100),或者如果你的表单来源于模型,那么通过模型中的verbose_name属性。
  • :) 我不知何故认为您正在从事一个需要支持多种语言的项目(这根本不是您所写的)。如果您的项目需要使用单一语言,那么@shellbye 的答案当然会更简单和正确。

标签: python html django forms overriding


【解决方案1】:

您可以像这样在model 中使用verbose_name

field = models.CharField(max_length=200, verbose_name="your_language_here")

更多信息见here

如果您的 form 不是来自“Model, you can uselabel”,而是像这样:

field = forms.CharField(label="your_language_here")

更多信息here

【讨论】:

    【解决方案2】:

    您可以复制生成的 HTML(CSRFtoken 除外,您必须将其设置为 {% csrf_token %})并更改标签内的值。

    如果您想让它更易于维护且不易出错,我将在您的 forms.py 中更改表单标签 https://docs.djangoproject.com/en/1.8/ref/forms/fields/#label

    无论如何,表单验证错误将是英文的。所以如果你想把它做好,你必须阅读django docs on translation

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 2013-05-22
      • 2017-07-16
      • 2012-10-24
      • 2018-02-22
      • 2015-02-25
      • 1970-01-01
      • 2017-06-21
      • 2020-08-01
      相关资源
      最近更新 更多