【发布时间】:2018-09-25 09:54:37
【问题描述】:
我正在发现 Django (v2.1.1) 并想设置一个 登录页面,其中我有 2 个电子邮件字段,如果 2 个字段相同,我拨打form.is_valid()。
项目树:
├── manage.py
├── requirements.txt
├── project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ ├── wsgi.py
│ └── templates
│ ├── base.html
│ ├── project
│ │ └── home.html
│ └── registration
│ ├── logged_out.html
│ ├── login.html
│ └── signin.html
└── app
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── urls.py
├── views.py
├── migrations
└── templates
└── app
└── home.html
project/settings.py 中的国际化配置:
# (…)
# Internationalization
LANGUAGE_CODE = 'fr-fr'
USE_I18N = True
USE_L10N = True
# (…)
使用 基本的 django 登录视图 效果很好:
project/views.py:
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
def index(request):
return render(request, 'project/home.html', {'context':'project index'})
def signin(request):
# (…)
form = UserCreationForm()
return render(request, 'registration/signin.html', {'form': form})
我有一个很好的法语翻译 HTML 表单(submit button 除外):
让我们在表单中添加一个email 字段,email 是一个内置的用户字段(如first_name 和last_name)所以我只需添加一个新类SignInForm 继承自UserCreationForm:
project/forms.py:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class SignInForm(UserCreationForm):
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
我更新project/views.py:
# (…)
from project.forms import SignInForm
# (…)
def signin(request):
# (…)
form = SignInForm()
return render(request, 'registration/signin.html', {'form': form})
有效:添加了一个不错的法语翻译字段,但它没有help_text 属性:
现在我被困住了……
如果我想将属性'required': True 设置为email 字段(它是必需的,我想显示翻译后的help_text)。我发现的唯一方法是覆盖内置的电子邮件字段,但我松散了翻译,它没有显示help_text:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms
class SignInForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
如果我添加第二个email2 字段,我希望使用email2 = User.email 之类的内容复制原始User.email,但看起来这不是存储电子邮件的好地方。我可以像上面一样使用forms.EmailField(),但我真的很想利用内置翻译。
那么这是我的问题:
如何将email 字段与内置属性(名称、必需、help_text、...)一起使用并获得翻译? (当我有答案时,我假设我会找到对submit、first_name 和last_name 执行相同操作的方法)
我可以使用此限制复制电子邮件字段吗? (我不想存储第二个字段,只是在调用form.is_valid() 之前检查)
_
【问题讨论】:
标签: python django forms localization internationalization