2011-12-12 3 views
1

종종 TextField에 저장된 설명에서 서로를 참조하는 'Projects'묶음이있는 사이트가 있습니다. 오히려 하드 코딩 자신의 설명에서 프로젝트 사이의 연결을, 나는 설명 필드에, 예를 들어, 토큰의 일종을 사용하여 참조하여 DRY 일을 계속하고 싶습니다보다 :Django : DRY TextFields의 내부 링크

Blabla text describing this project, this project was inspired by 
{{ project "ProjectB"}} and lead to the development of {{ project "ProjectC" }}. 

다음이다 처리에 설정 :

Blabla text describing this project, this project was inspired by 
<a href="/projects/ProjectB">ProjectB</a> and lead to the development 
of <a href="/projects/ProjectC">ProjectC</a>. 

가 명확하게하려면 다음과 같이 설명 텍스트의 다양한 지점에서 하이퍼 링크 등의 다른 항목에 대한 많은 참조에 아무도를 포함 할 수 있습니다 무료 텍스트입니다. CMS에서이 효과는 일반적으로 노드/객체 ID별로 항목에 연결하는 몇 가지 방법을 통해 이루어 지므로 링크가 변경되면 참조를 계속 수행 할 수 있습니다.

은 내가 생각했습니다

  • 템플릿으로 텍스트 필드를 평가 및 설명에서 'URL'templatetag를 사용하여. 가장 쉬운 솔루션 인 것처럼 보이지만 templatetag는 컨텐트 편집자에게 특히 친숙하지 않으며 전체 템플릿 렌더러를 통해 각 설명을 평가하는 것이 다소 번거로워 보입니다.
  • 단지이 목적을 위해 간단한 간단한 태그를 구문 분석하기 위해 기본 가짜 템플릿 시스템을 다시 구현하는 templatetag를 구현합니다.
  • 설명이 데이터베이스에 저장되기 전에 설명을 사전 처리하도록 TextField를 확장합니다.

비슷한 일을 한 사람이 있습니까? 너는 무엇을 제안 하겠는가? 문제를 가지고 나는

답변

2

방금 ​​a similar question on SO으로 대답했습니다. 그것은 문제를 해결할 수도 있습니다 (우연히 3 년 후에도 여전히 답을 찾고 있다면).

표시하기 전에 Textfield에서 사용자 정의 내부 링크 형식을 구문 분석하기위한 템플릿 필터를 작성했습니다. Markdown을 사용하여 텍스트 필드를 구문 분석하므로 링크가 Markdown 형식으로 반환되지만 HTML 대신 쉽게 작성할 수 있습니다.

Check out my answer here.

업데이트 : 나는 대한 내부 인하 형식의 링크 내부 링크뿐만 아니라 스스로를 해결 a revised version on djangosnippets.org을 기록했다.

+0

그 다른 질문에 대한 위대한 대답은, 이것은 기본적으로 제가 그 당시에 한 일이었습니다! – Tom

+0

감사합니다. @ 톰, 의견에 감사드립니다! – bobtiki

0

, 당신은 당신의 템플릿에 사전을 전달하는 사용자 지정 서식 프로세서를 사용하는 경우는 : 을 settings.py에서 : MyApp를/myprocessor.py에서

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "myapp.myprocessor.foo", 
) 

:

from django import template  
def foo(request): 
    ProjectA = get_Project_from_database 
    t = template.Template(ProjectA.html) 
    c = template.Context({'name': ProjectA.name}) 
    rendered_ProjectA = t.render(c) 
    return { 'rendered_ProjectA': rendered_ProjectA } 

또는 Django 템플릿 시스템을 사용하고 싶지 않다면 정규 표현식을 사용할 수 있습니다. (다시 가져 오기)

+0

캄 비츠에 감사드립니다. 이 토큰은 프로젝트 모델의 TextField 특성에 있으며 뷰/템플릿 수준 또는 개체 생성시 구문 분석해야합니다. 조작 할 필요가 없습니다. 컨텍스트가 도움이 될 것입니다. – Tom