2011-10-20 11 views
2

私はdjangoプロジェクトに取り組んでおり、thingsのリストを持つモデルを持っています。サイト全体を通して、私は他のモデルに入力された構造化されていないテキストを持っているかもしれません。ページの表示時に、thing.slugへの参照については、非構造化テキストを解析し、thing.get_absolute_urlへのリンクを含めたいと思います。ディクショナリ用語の構造化されていないテキストを解析して、用語へのリンクを含める

私はアプリは、すべてのthingsの辞書から任意のthing.slug条件にマッチする正規表現のパーサのようなものを使用していますobject.textを解析するカスタムtemplatetag、で構成する必要があるだろうと仮定します。例えば

テイク:

私はthingAとthingBを持っていますが、thingCをしたいと思います。

I have <a href="/things/a">thingA</a> and <a href="/things/b">thingB</a>, but would like <a href="/things/c">thingC</a>. 

すでにこれを行いDjangoアプリケーションがある場合は、偉大な:

は、に修正されるでしょう!それ以外の場合は、これを達成するための最善の方法に関するアドバイスをいただければ幸いです。私はそれに精通していないにもかかわらず、jqueryのような他の提案をしています。

+1

マッチングはどのように正確に行われますか? 'thingA'は'/things/a'に変換されるべきですが、 'thingamajiggy'は' thing/amajiggy'に変換されるべきですか?それはCamelCaseなので、 'thingThatIWant'は'/things/that/i/want'になるのですか? – jro

+0

もしあなたがdjangoをよく知っているなら、私のモデルは 'title'と' slug'のフィールドを持っていますので、slugはurlパターンと一致します。 – erikankrom

+0

@erikankrom:あなたの質問を更新し、 'thingamajiggy'と' thingThatIWant'がどのように扱われるべきかを正確に示すのに役立ちます。それはあなたのモデルの関連部分を質問に含めるのにも役立ちます。 –

答えて

1
urls = dict((thing.slug, thing.get_absolute_url) for thing in things) 
for word in object.text.split(): 
    if word in urls: 
    result.append('<a href="'+urls[words]+'">'+word+'</a> ') 
    else 
    result.append(word+' ') 
+0

私はこの方法が好きです。モデルpost_saveでは、おそらくセロリを介してobject.textをobject.htmlに解析できます。 – erikankrom

1

再モジュールは、検索のこの種のために設計されて交換されてサブ()機能を有しています。非構造化テキストの残りの部分から「もの」を区別し、適切な置換文字列を構築するパターンのための

検索:

>>> import re 
>>> s = 'I have thing.slug and thing.foo, but would like thing.foo' 
>>> re.sub(r'(\w+)\.(\w+)', r'<a href="/\1/\2">\1.\2</a>', s) 
'I have <a href="/thing/slug">thing.slug</a> and <a href="/thing/foo">thing.foo</a>, but would like <a href="/thing/foo">thing.foo</a>' 

これは、より信頼性の高い(より少ないエラーが発生しやすい)である、あなたはのためのパターンを作るています「物事」の特徴:

>>> s = 'I have {thing.slug} and {thing.foo}, but would like {thing.foo}' 
>>> re.sub(r'{(\w+)\.(\w+)}', r'<a href="/\1/\2">\1.\2</a>', s) 
'I have <a href="/thing/slug">thing.slug</a> and <a href="/thing/foo">thing.foo</a>, but would like <a href="/thing/foo">thing.foo</a>' 
関連する問題