Django:已修改查询列表的上下文

Django:已修改查询列表的上下文,django,django-views,Django,Django Views,我有一个带有博客风格文档的数据库,如作者姓名、出版日期、正文等 我已经构建了一个django框架,将数据库中的条目作为搜索词的结果输出。那部分没问题。问题是我想显示正文部分,突出显示匹配的搜索词(相当于谷歌搜索结果)。这意味着我无法创建仅具有body_text属性的模板标记,因为该文本未高亮显示。我已经做了一个函数,它接收查询和正文文本作为输入,并输出相同的文本和粗体显示的搜索词。 我现在的问题是如何将这个结果传递给html模板 使用from Django文档,假设您有以下views.py: d

我有一个带有博客风格文档的数据库,如作者姓名、出版日期、正文等

我已经构建了一个django框架,将数据库中的条目作为搜索词的结果输出。那部分没问题。问题是我想显示正文部分,突出显示匹配的搜索词(相当于谷歌搜索结果)。这意味着我无法创建仅具有body_text属性的模板标记,因为该文本未高亮显示。我已经做了一个函数,它接收查询和正文文本作为输入,并输出相同的文本和粗体显示的搜索词。 我现在的问题是如何将这个结果传递给html模板

使用from Django文档,假设您有以下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)
def signal_tokens(text,query_q):
    ...
    return new_text
以及相应的模板:

{% 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 %}
{{ question.question_text|highlight:query_q }}
替换
{{question.question_text}的最佳方法是什么
使用
signal\u tokens
的输出?我的解决方案是用字典列表复制上下文变量,其中每个字典都是每个条目的副本,除了
'question\u text'
键,我在该键中使用了
signal\u 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)

但问题是我需要复制所有条目。有没有更优雅的方法来解决此问题?

这是a的理想用例。将突出显示代码移动到templatetags目录中的文件,将其注册为筛选器,然后可以从模板调用它:

{% 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 %}
{{ question.question_text|highlight:query_q }}

显然,您还需要将
query\u q
传递到模板上下文。

谢谢,这正是我想要的!