【问题标题】:django - allow user to set something in databasedjango - 允许用户在数据库中设置一些东西
【发布时间】:2012-09-15 22:01:04
【问题描述】:

我想让用户通过点击国家标志来更改网站的语言。

在我的 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 中没有得到任何东西?

【问题讨论】:

    标签: python mysql database django model


    【解决方案1】:

    在 Django 模板中,您不能调用带有参数的 Python 函数。见https://docs.djangoproject.com/en/1.4/topics/templates/#variables。这就是为什么你在写{{request.user.get_profile.get_language}} 时没有收到错误信息的原因(实际上,你的函数是在没有参数的情况下调用的,产生的异常被Django 吞没了)。

    此外,您不能在服务器端的 Python 函数中使用 lang 参数,它是客户端 JavaScript 函数参数。尝试使用 AJAX 调用该函数 - 您需要为此添加另一个视图函数,我强烈建议您不要使用纯 JavaScript,而是使用 jQuery 之类的库。

    对于您的实际问题(让用户设置他的首选语言),Django's internationalization package 中已经有a function for that

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 2012-05-03
      • 2020-01-11
      • 1970-01-01
      相关资源
      最近更新 更多