2016-11-11 6 views
3

私はdjangoと名前と値の外部リストを扱っています。私は自分のhtmlテンプレートにいくつかの値を表示しようとしているカスタムテンプレートタグを使用しています。Pythonループがdjangoテンプレートの特殊文字で壊れます

names.txt

hello 4343.5 
bye 43233.4 
Hëllo 554.3 
whatever 4343.8 

マイテンプレートタグは、この(変数の簡素化名)のようになります:

# -*- coding: utf-8 -*- 
from django import template 

register = template.Library() 

@register.filter(name='operation_name') 
def operation_name(member): 
    with open('/pathtofile/member.txt','r') as f: 
     for line in f: 
      if member.member_name in line: 
       number = float(line.split()[1]) 
       if number is not member.member_number: 
        member.member_number = number 
        member.save() 
       return member.member_number 
    return 'Not in List' 

ここ

は、リストがどのように見えることができるものの一例ですスペシャルcharがないエントリでもうまく動作します。しかし、member.member_namesの名前に特殊文字があると、それは停止します。したがって、member.member_namesがHëlloの場合、スクリプト全体が停止します。私は何も返すことができません。これは私を夢中にさせている。特別な文字のない名前であっても、特殊な文字を含む名前が表示された後は表示されません。

私は何か助けていただきありがとうございます。

EDIT:

だから、これはトリックでした:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

をしかし、これは良い解決策である場合、私は知りません。

+1

このコードはテンプレートフィルタには何をしているのですか?なぜファイルからメンバオブジェクトを作成するのがディスプレイロジックの責任ですか? –

+0

私はdjangoを初めて使っています。だから多分それは意味をなさない。テキストファイルの数字がデータベースのエントリと異なるかどうか(テキストファイルは毎日更新されます)を確認したい場合は、新しい値を表示します。これは、通常の名前を意図して動作します。 – kingardox

+0

比較中に特殊文字を無視しますか? –

答えて

1

これは、あなたがunicodeに両方を比較してみ役立ちます -

if (member.member_name).decode('latin1') in (line).decode('latin1'): 
    number = float(line.split()[1]) 
    if number is not member.member_number: 
     member.member_number = number 
     member.save() 
+0

ありがとうございます。しかし、残念なことにそれは同じ動作を引き起こします。 – kingardox

+0

HëlloとHelloの両方の文字列が異なる必要がありますか? –

+0

編集編集@kingardox –