2010-12-06 5 views
0

私のDjangoモデルには参照ロジックが必要なフィールドがあります。例として:最後のマークアップで提示するとこれはビューロジックに入れますか?

This is an example of text in the field.[ref type="quotation" name="Martin" date="2010"] 

、これは(減少例)としてレンダリングされます。

This is an example of text in the field.<a href="#ref">1</a> 
[SNIP] 
<ul> 
<li><a name="ref1">Martin, 2010</a></li> 
</ul> 

だから、基本的に、私は別のに行くための参照のリストを構築しています{{}}ブロックをさらに下に移動します。

この種のテキスト処理ロジックをビューに入れるべきですか(テンプレートに2つの値を渡します.1は修正されたテキスト、1は参照テーブルです)、またはそこにさらにいくつかのDjango-esqueの方法がありますフィルタなどを介してそれを行うには?

答えて

1

実際には、このようなテキストフィールドに参照を格納する場合、基本的に単純なマークアップ言語を使用して参照を格納しています。

この場合、テンプレートはこれを行う場所になると思います。

残念ながら、フィルタを作成してコンテキスト変数に書き込む方法はありません。ところで

{% output_with_references article_content myreferencesvar %} 

[snip] 

<ul> 
{% for ref in myreferencesvar %} 
<li><a name="{{ ref.id }}">{{ ref.authors }}, {{ ref.year }}</a></li> 
{% endif %} 
</ul> 

は、フィルタを使用しているページのコンテキストに記述する方法ががあれば、私は」だからではなく、フィルタを使用して、あなたは、何かのようにタグを使用する必要があるとしていますそれについて知りたいです。

更新

それを実装するには、次のようなものを使用したい:これだけを確認するために、返信用

from django.template import Library, Node, TemplateSyntaxError 

register = Library() 

class OutputWithReferencesNode(Node): 
    def __init__(self, input, ref_varnam='references'): 
     self.input = input 
     self.ref_varnam=ref_varnam 

    def render(self, context): 
     output = self.input 
     references = [] 
     # process self.input 
     context[self.ref_varnam] = references 
     return output 

@register.tag 
def output_with_references(parser, token): 
    try: 
     fnctn, input, ref_varname = token.split_contents() 
    except ValueError: 
     raise TemplateSyntaxError, "%s takes the syntax %s text_to_output references_variable_name" % (fnctn,) 
    return OutputWithReferencesNode(input, ref_varname) 
+0

こんにちは、おかげで:outputwithreferencesはmyreferencesvar(引数1 =マークアップでテキストを作成する必要があります引数2は新しい変数ですか?)、これをページのさらに下に使用できますか? –

+0

はい、サンプルコードが追加されました。しかし、テストされていません。 –

+1

マークアップの特定の構文に設定されていない場合は、既存のもの(MediaWiki http://en.wikipedia.org/wiki/Wikipedia:Citing_sourcesなど)を使用することを検討してください。次に、mwlib(http://code.pediapress.com/wiki/wiki/mwlib)を使用してマークアップを解析することができます。 –

関連する問題