python - django用通用视图以后如何生成静态页面?
高洛峰
高洛峰 2017-04-18 09:06:00
0
2
411

我的需求

用户访问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等都支持静态文件生成.
针对不支持动态的空间,生成静态页面我感觉还是很有必要的!


最后强调!

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(2)
巴扎黑

Hahahahaha, menggunakan crawler untuk merangkak laman web saya adalah sama seperti semasa saya menggunakannya = =, anda boleh bayangkan.

Biasanya perkara pertama yang terlintas di fikiran ialah interaksi ajax, tetapi ajax nampaknya dinamik (∩_∩), saya rasa begitu, saya tidak tahu sama ada ia betul:

Jika setiap indeks mempunyai gaya yang agak standard, maka susun sahaja seperti yang anda katakan Anda boleh menggunakan skrip shell atau beberapa perpustakaan python, ia sudah cukup untuk mengendalikan fail, selagi fail ada. dan Pembolehubah dan sebagainya telah diganti, tetapi terdapat masalah dengan pemaparan? Anda boleh menambah urutan masa menunggu untuk mencetuskan sesuatu

Tetapi anda tidak perlu melakukan ini sebenarnya, bukankah lebih baik jika anda hanya memaparkannya secara terus dan kemudian menukarnya menjadi halaman web statik tulen dan kemudian mengeluarkannya? Saya belum mencubanya, tetapi semasa saya belajar unittest dan selenium, saya terjumpa hasil keluaran halaman web ujian Django, dan saya teringat banyak fungsi terbina dalam yang menukarnya kepada HTML tulen, dan ia juga boleh menyebabkan pembolehubah. Sebaliknya, jika anda menambah token untuk melindunginya, ia mungkin tidak akan dipindahkan, tetapi ia sebenarnya sangat menyusahkan jika anda memasangnya dengan idea pertama.

小葫芦

Jika anda hanya ingin menjana halaman statik, anda boleh melakukan ini
Tetapi terdapat banyak perkara yang perlu dipertimbangkan dalam laman web statik Anda perlu menjana halaman statik untuk setiap halaman data

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

with open('index.html', 'w') as f:
    f.write(html)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan