我有一个包含大量“项目”的网站,这些网站经常在其描述中相互引用(存储在TextField中)。 我不想在描述中对项目之间的链接进行硬编码,而是通过使用某种令牌来引用DRY,例如,在描述字段中:
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链接到项目来实现 - 这样,如果链接发生变化,仍然可以遵循引用。
我考虑过:
有没有人做过类似的事情?你会建议什么?
答案 0 :(得分:2)
我刚回答a similar question on SO,似乎它也可能解决您的问题(如果您偶然在三年后仍在寻找答案)。
我编写了一个模板过滤器,用于在显示之前解析文本字段中的自定义内部链接格式。我使用Markdown来解析我的文本字段,因此我将链接以Markdown格式返回,但它们可以很容易地以HTML格式编写。
更新:我发布了a revised version on djangosnippets.org,它解决了降价格式链接中的内部链接,以及他们自己的链接。
答案 1 :(得分:0)
如果我遇到了您的问题,您应该使用自定义模板处理器将字典传递给您的模板: 在settings.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",
)
在myapp / myprocessor.py中:
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模板系统,你可以使用正则表达式(import re)