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

我的需求

用户访问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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(2)
巴扎黑

はははは、クローラーを使用して自分の Web サイトをクロールするのは、私がクローラーを使用したときと同じ = =、想像できるでしょう。

通常、最初に思い浮かぶのは ajax の相互作用ですが、ajax は動的であるようです?

各インデックスが比較的標準化されたスタイルを持っている場合は、シェルスクリプトまたはいくつかのPythonライブラリを使用できます。とにかく、ファイルがそこにある限り、ファイルを操作できれば十分です。変数などは置き換えられていますが、レンダリングに問題がありますか? 何かをトリガーするためにスレッドの待ち時間を追加できます

しかし、実際には、これを行う必要はなく、直接レンダリングして、純粋な静的 Web ページに変換して出力した方がよいのではないでしょうか。試したことはありませんが、unittest と selenium を学習していたときに、Django のテスト Web ページの出力結果に出会い、それらを純粋な HTML に変換し、変数をレンダリングすることもできる組み込み関数がたくさんあることを思い出しました。逆にトークンを追加して守ると転送されなくなることもありますが、最初の考えで組み立てると実は非常に面倒です。

いいねを押す +0
小葫芦

静的ページを生成したいだけの場合は、これを行うことができます
しかし、静的 Web サイトでは、ページングを例にとると、データのページごとに静的ページを生成する必要があるため、考慮すべきことがたくさんあります。

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート