首页 > django用通用视图以后如何生成静态页面?

django用通用视图以后如何生成静态页面?

我的需求

用户访问index的时候,需要生成一个静态文件,比如index.html

强调一下,我要生成的是静态文件!不要建议我用缓存或是其他什么的,我就是要生成一个静态网站!!!

我的代码

views.py 是这样的:

class IndexView(BaseMixin, ListView):
    template_name = 'index.html'
    context_object_name = 'article_list'
    paginate_by = settings.PAGE_NUM  # 分页--每页的数目


    def get_queryset(self):
        article_list = Article.objects.filter(status=0)
        return article_list

    def get_context_data(self, **kwargs):
        # 轮播
        kwargs['carousel_page_list'] = Carousel.objects.all()
        kwargs['home']= True
        return super(IndexView, self).get_context_data(**kwargs)

我的思路:

用户访问index,打开指定路径的文件,然后写入渲染出来的模板的代码

比如这样,在视图中加这样一段代码:

class IndexView(BaseMixin, ListView):
    ......
    with open("index.html", 'w') as static_file:
        static_file.write("123")
    ......

这样是可以的,访问首页的时候,会在根目录生成一个index.html的文件,但是不知道怎么渲染模板和变量!!!,还有我用的是jinjia2

扩展思路:

实在不行,就用下策,自己写个url的构造器,把django的所有链接给构造出来!
然后自己写个爬虫去爬自己的网站.
但是这样真的很低效!!

可能的思路:

感觉应该会有现成的模块来解决这个问题!
比如dedecms,zblog等都支持静态文件生成.
针对不支持动态的空间,生成静态页面我感觉还是很有必要的!


最后强调!

目标是生成一个静态网站!!!
目标是生成一个静态网站!!!
目标是生成一个静态网站!!!


如果你仅仅是为了生成静态页,可以这样
但是静态站要考虑的东西比较多,就拿分页来说,你要把每页数据都生成静态页面

template_name = 'index.html'
vm = {
    'key': 'value'
}
html =  render(request, template_name, vm).content

with open('index.html', 'w') as f:
    f.write(html)

哈哈哈哈哈,用爬虫爬自己的网站和我当初一个样= =,亏你想得出。

一般第一时间就是想到ajax交互,不过ajax好像是属于动态?好吧(∩_∩),我这么想的,不知对不对:

每个index假如都有比较规范的样式,那就如你所言组装起来就好了,用shell脚本可以,python的一些库也行,反正能操作文件就行了,只要文件在,并且变量等都替换好,渲染就问题了?你可以加个线程等待时间,触发什么的

不过你可以不用这样,其实你直接渲染好再转成纯静态网页再输出不就好了吗?我没试过,但我学unittest配合selenium时接触到django检验网页输出结果就记得好些转成纯html的内置函数,而且还能渲染变量的。反倒是加个token保护可能会转不出来,但你要是第一个思路组装其实非常麻烦。

【热门文章】
【热门文章】