如何解决在 Django 的登录模板中添加语言字段
我必须在 Django 中启动一个项目,该项目应该能够翻译成三种语言(西班牙语、英语和意大利语)。
我在 settings.py 文件中定义了 3 种语言,如下所示:
LANGUAGES = [
('es',_('Español')),('en',_('English')),('it',_('Italiano')),]
我的意图(我不确定是否是所示的)是当用户登录时,他们输入他们的用户名、密码和他们将使用的语言,然后应用程序从那里建立菜单、表单等根据指示的语言。
我的第一种方法是通过合并语言字段来扩展用户模型,如下所示:
class User(AbstractUser):
language = models.CharField(max_length=10,choices=settings.LANGUAGES,default=settings.LANGUAGE_CODE)
修改AUTH_USER_MODEL变量:
AUTH_USER_MODEL = 'usuarios.User'
并修改登录表单,如下所示:
class LoginForm(ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
#self.fields['username'].widget.attrs['autofocus'] = True
class Meta:
model = User
fields = 'username','password','language'
widgets = {
'username': forms.TextInput(
attrs={
'placeholder': 'Ingrese su username',}
),'password': forms.PasswordInput(render_value=True,attrs={
'placeholder': 'Ingrese su password',}
),'language': forms.SelectMultiple(attrs={
'class': 'form-control select2','style': 'width: 100%','multiple': 'multiple'
})
}
此外,在登录模板中再添加一个字段:
<div class="form-group form-primary">
{{form.username|add_class:'formcontrol'|attr:'type:text'}}
<span class="form-bar"></span>
<label class="float-label">Usuario</label>
</div>
<div class="form-group form-primary">
{{ form.password|add_class:'formcontrol'|attr:'type:password' }}
<span class="form-bar"></span>
<label class="float-label">Contraseña</label>
</div>
<div class="form-group form-primary">
{{ form.language|add_class:'formcontrol'|attr:'name:language'}}
<span class="form-bar"></span>
<label class="float-label">Lenguaje</label>
</div>
尽管提到了 3 个操作,但在登录时我没有看到带有可用语言的选择,并且 form.valid () 对我也不起作用。
这些是登录视图。首先使用基于类的视图:
class LoginFormView(LoginView):
template_name = 'login.html'
def dispatch(self,request,**kwargs):
if request.user.is_authenticated:
return redirect(setting.LOGIN_REDIRECT_URL)
return super().dispatch(request,**kwargs)
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Iniciar sesión'
return context
既然它不起作用,那么使用基于角色的视图:
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
print(form.is_valid())
if form.is_valid():
cd = form.cleaned_data
print(cd)
user = authenticate(request,username=cd['username'],password=cd['password'])
print(user)
if user is not None:
if user.is_active:
login(request,user)
return HttpResponse('Authenticated successfully')
else:
return HttpResponse('Disabled account')
else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request,'login.html',{'form': form})
这就是为什么我问你是否可以指导我解决我的问题的正确方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。