2010-12-06 3 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

실제로 텍스트 필드에 참조를 저장하는 경우에는 기본적으로 간단한 마크 업 언어를 사용하여 참조를 저장합니다.

이 경우 템플리트가이 작업을 수행 할 수있는 장소라고 생각합니다.

필자는 불행히도 컨텍스트 변수에 필터를 만들고 쓰는 방법을 모르겠습니다. BTW

{% 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)를 사용하여 마크 업을 파싱 할 수 있습니다. –

관련 문제