在Django中解析之前预先加载模板和模板变量

时间:2017-04-19 22:20:09

标签: python django templates

我有一个txt文件,我在views.py中加载并做了一些工作(现在它只是按段落分割,但稍后会有更多工作完成)。

在本文档中,我有一些Django模板标签{{user.firstName}}等。

我将此文档发送到模板以添加其HTML等。但它不会呈现标记。我知道Django加载模板一次并将其全部存储在树中以提高速度。我找不到解决方法。我可以预先加载文档,然后让解析器运行吗?我可以在view.py中添加HTML标记并在解析之前将其发送到模板吗?

任何想法或想法都会很棒。

以下是我的代码:

View.py

class DocumentReview(TemplateView):
template_name = 'paperwork\document.html'

def get_context_data(self, **kwargs):
    context = super(DocumentReview, self).get_context_data(**kwargs)
    context['user'] = {'firstName': 'x', 'lastName': 'y'}
    context['document'] = self.get_document()
    return context


def get_document(self):
    module_dir = os.path.dirname(__file__)  # get current directory
    file_path = os.path.join(module_dir, 'documents\sample.txt')
    document = {}
    with open(file_path, 'r') as fp:
        data = fp.read()
        document = data.split("\n\n")
    return document

这是sample.txt:

Hello {{ user.firstName }} {{ user.lastName }},

 This is a sample txt file.

这是document.html

      {% for para in document %}
                <p>{{ para }}</p>
                {% endfor %}

1 个答案:

答案 0 :(得分:1)

您必须使用template loader模块,并更改get_document功能:

from django.template.loader import render_to_string 
def get_document(self, context):
    data = render_to_string('documents\sample.txt', context)
    return data.split("\n\n")

你这么称呼它:

context['document'] = self.get_document(context)

在此之前,您必须修改settings.TEMPLATES,以便加载程序找到您的文件documents\sample.txt