将django模板渲染为html文件

时间:2017-08-09 15:18:48

标签: html django-templates

我需要将一个django项目移动到一个php服务器,我想尽可能多地保留前端。 有没有一种简单的方法可以将模板呈现为未标记的HTML文件,并将它们存放到“template_root”中,就像静态文件和媒体文件一样?

或者至少有一个视图在页面上加载渲染并将生成的html保存到文件中? (仅适用于开发!)

我不关心来自视图的动态数据,只是不想重写所有“extends”和“includes”和“staticfiles”或自定义模板标签

1 个答案:

答案 0 :(得分:1)

我想出了一种基于每个View基础的方法,使用Django的render_to_string:

from django.template.loader import render_to_string
from django.views.generic import View
from django.shortcuts import render
from django.conf import settings

def homepage(request):
    context = {}
    template_name = "main/homepage.html"
    if settings.DEBUG == True:
        if "/" in template_name and template_name.endswith('.html'):
            filename = template_name[(template_name.find("/")+1):len(template_name)-len(".html")] + "_flat.html"
        elif template_name.endswith('.html'):
            filename = template_name[:len(template_name)-len(".html")] + "_flat.html"
        else:
            raise ValueError("The template name could not be parsed or is in a subfolder")
        #print(filename)
        html_string = render_to_string(template_name, context)
        #print(html_string)
        filepath = "../templates_cdn/" + filename
        print(filepath)
        f = open(filepath, 'w+')
        f.write(html_string)
        f.close()
    return render(request, template_name, context)

我尝试将其尽可能通用,因此我可以将其添加到任何视图中。 我已经用它来编写一个迭代调用所有模板的视图并将它们全部转换,因此更接近" collectstatic"功能

我不知道如何从渲染参数中获取template_name,因此我可以将其作为重用函数。作为基于类的视图混合可能更容易吗?