我有一个包含博客风格文档的数据库,即作者的姓名,出版日期,正文等。
我已经构建了一个django框架,可以根据搜索词输出数据库中的条目。那部分还可以。问题是我想显示正文文本的部分,突出显示匹配的搜索词(相当于谷歌搜索结果)。这意味着我无法仅使用body_text属性创建模板标记,因为该文本未突出显示。我已经做了一个函数,它接收查询和正文文本作为输入,并输出相同的文本,其中找到的搜索项以粗体显示。 我现在的问题是如何将此结果传递给html模板?
使用Django文档中的tutorial假设您有以下views.py:
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
和通讯员模板:
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
现在假设你在views.py中有这个功能:
def signal_tokens(text,query_q):
...
return new_text
将{{ question.question_text }
替换为signal_tokens
的输出的最佳方法是什么?我的解决方案是使用字典列表复制上下文变量,其中每个字典都是每个条目的副本,'question_text'
键除外,我使用signal_tokens
结果:
def index(request):
query_q = 'test'
latest_question_list = Question.objects.order_by('-pub_date')[:5]
new_context = []
for entry in latest_question_list:
temp_d = {}
temp_d['id'] = entry.id
temp_d['question_text'] = signal_tokens(entry.question_text,query_q)
new_context.append(temp_d)
context = {'latest_question_list': new_context}
return render(request, 'polls/index.html', context)
但问题是我需要复制所有条目。有没有更优雅的方法来解决这个问题?
答案 0 :(得分:3)
这是template filter的理想用例。将高亮显示代码移动到templatetags目录中的文件,将其注册为过滤器,然后您可以从模板中调用它:
{{ question.question_text|highlight:query_q }}
显然,您还需要将query_q
传递给模板上下文。