Python 获取Django模板的源代码

Python 获取Django模板的源代码,python,django,django-templates,Python,Django,Django Templates,我需要得到一个模板的来源。我一次又一次地调查这件事,但没有成功 显然,模板对象是原始源 在搞乱我的代码库之前,我要问:有没有一种简单的方法来获取模板的源代码 模板是文本文件(通常是HTML,但不一定是),当从对的调用中调用时(通常)会使用上下文呈现,例如。如果您有一个视图函数,它应该指定它使用的模板 从文档中: from django.shortcuts import render def my_view(request): # View code here... return

我需要得到一个模板的来源。我一次又一次地调查这件事,但没有成功

显然,模板对象是原始源

在搞乱我的代码库之前,我要问:有没有一种简单的方法来获取模板的源代码

模板是文本文件(通常是HTML,但不一定是),当从对的调用中调用时(通常)会使用上下文呈现,例如。如果您有一个视图函数,它应该指定它使用的模板

从文档中:

from django.shortcuts import render

def my_view(request):
    # View code here...
    return render(request, 'myapp/index.html', {"foo": "bar"},
        content_type="application/xhtml+xml")
在这里,模板将是“templates/myapp/index.html”。

模板是文本文件(通常是html,但不一定是),当从对的调用中调用时,这些文本文件(通常)会与上下文一起呈现,例如。如果您有一个视图函数,它应该指定它使用的模板

从文档中:

from django.shortcuts import render

def my_view(request):
    # View code here...
    return render(request, 'myapp/index.html', {"foo": "bar"},
        content_type="application/xhtml+xml")

在这里,模板应该是“templates/myapp/index.html”。

有一个很棒的快捷方式叫做

正如de docs所说:

它加载模板,呈现模板并返回结果字符串:

从django.template.loader导入呈现到字符串
rendered=render_to_string('my_template.html',{'foo':'bar'})


因此,呈现的变量是一个带有模板源代码的字符串

有一个很好的快捷方式叫做

正如de docs所说:

它加载模板,呈现模板并返回结果字符串:

从django.template.loader导入呈现到字符串
rendered=render_to_string('my_template.html',{'foo':'bar'})


因此,呈现的变量是一个包含模板源代码的字符串。
模板
对象不保留对原始源的引用,但保留对原始源文件的引用,您可以从那里重新读取源:

source = open(template_instance.origin.name, 'r').read()

模板
对象不保留对原始源的引用,但保留对原始源文件的引用,您可以从那里重新读取源:

source = open(template_instance.origin.name, 'r').read()

若您确切地知道加载模板的加载程序,那个么可以直接使用加载程序方法

from django.template.loaders.app_directories import Loader
source = Loader.load_template_source(file_name)[0]

文件名与使用加载程序加载模板时相同。获取模板(文件名)

如果您确切知道加载程序正在加载模板,则可以直接使用加载程序方法

from django.template.loaders.app_directories import Loader
source = Loader.load_template_source(file_name)[0]

文件名与使用加载器加载模板时相同。get_template(文件名)

rendered
将以呈现的(duh)模板结束,而不是其源(因为它在磁盘上的模板文件中)。
rendered
将以呈现的(duh)模板结束,而不是其源(因为它在磁盘上的模板文件中)。这并不能回答问题。这很好,但我刚刚注意到在Django 1.6中没有实现:确实;这个问题似乎很重要。我已经在我现有的一个项目上测试了这个,结果是。您可能会考虑遵循相同的方法。请注意,在Django 1.7上,TestPosi.Endot不存在TePaLeMeDebug=false——它将在您的开发环境中发挥巨大作用,然后在阶段性或更糟的生产上失败得很惨。这很好,但我刚刚注意到,在Django 1.6中没有实现这一点:这个问题似乎很重要。我已经在我现有的一个项目上测试了这个,结果是。您可能会考虑遵循相同的方法。请注意,在Django 1.7上,TestPosi.Endot不存在TePaLeMeDebug=false——它将在您的开发环境中发挥巨大作用,然后在阶段性或更糟的生产上失败。