0

ユーザーが国旗をクリックしてサイトの言語を変更できるようにしたい。

私の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」としていくつかのボタンに設定されています。
これは 2 つのことを行う必要があります:
1. すぐに言語を変更します (完了です)
2. データベースの使用言語を変更します。次回ログインするときは、現在設定したとおりになります (動作しません :( ) 次のようなエラーが表示されます。

   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

うーん...何か助けて?「言語」を間違った方法で指定しただけですか、それとも Django で何かを得られませんか?

4

1 に答える 1

1

Djangoテンプレートでは、パラメーターを使用してPython関数を呼び出すことはできません。https://docs.djangoproject.com/en/1.4/topics/templates/#variablesを参照してください。そのため、書き込み時にエラーメッセージは表示されません{{request.user.get_profile.get_language}}(実際には、関数はパラメーターなしで呼び出され、結果の例外はDjangoに飲み込まれます)。

langまた、サーバー側のPython関数では、クライアント側のJavaScript関数パラメーターであるパラメーターを使用することはできません。AJAXを使用して関数を呼び出してみてください。これには、別のビュー関数を追加する必要があります。ベアJavaScriptではなく、jQueryのようなライブラリを使用することを強くお勧めします。

実際の問題(ユーザーに好みの言語を設定させる)については、Djangoの国際化パッケージにそのための関数がすでにあります。

于 2012-09-24T12:38:55.177 に答える