我想让用户通过单击国旗来更改网站的语言。
在我的 models.py 文件中,我有:
class RegularUser(models.Model):
(...)
language = models.CharField(max_length = 10, null=True, blank=True, choices=[(a, _(b)) for (a,b) in settings.LANGUAGES], verbose_name=_("Language"))
我还在那里做了一个功能:
def set_language(self, new_lang):
lllang = self.language
lllang = new_lang
在我的 html 文件中,我有:
function setLang(lang){
language = document.getElementById("language")
lang_form = document.getElementById("language_form")
language.value= lang
lang_form.submit()
{{request.user.get_profile.set_language(lang) }}
}
此函数设置为某个按钮“onclick”。
这应该做两件事:
1.立即更改语言(完成)
2. 更改数据库中的 uset 语言,这样下次我们登录时 - 它将像我们现在设置的那样(它不起作用:( )
我收到这样的错误:
TemplateSyntaxError at /
Could not parse the remainder: '("lang")' from 'request.user.get_profile.set_language("lang")'
只是告诉 - 如果我会放:
{{request.user.get_profile.get_language}}
然后我就得到了我的语言的代码,所以没问题。 models.py 中的 get_language 函数:
def get_language(self):
if self.language:
return self.language
elif self.location and self.location.country:
return self.location.country.iso.lower()[:2]
else:
return None
嗯...有什么帮助吗? 我是否只是以错误的方式给出了“lang”,或者我在 Django 中没有得到任何东西?
最佳答案
在 Django 模板中,不能使用参数调用 Python 函数。请参阅https://docs.djangoproject.com/en/1.4/topics/templates/#variables 。这就是为什么当您编写 {{request.user.get_profile.get_language}}
时不会收到错误消息(实际上,您的函数是在不带参数的情况下调用的,并且产生的异常被 Django 吞没)。
此外,您不能在服务器端的 Python 函数中使用 lang
参数,该参数是客户端 JavaScript 函数参数。尝试使用 AJAX 调用该函数 - 您需要为此添加另一个 View 函数,我强烈建议您不要使用纯 JavaScript,而使用像 jQuery 这样的库。
对于您的实际问题(让用户设置他的首选语言),已经有了 a function for that在 Django's internationalization package .
关于python - django - 允许用户在数据库中设置某些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565109/