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

我的需求

用户访问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)
巴扎黑

하하하하하, 크롤러를 사용하여 내 웹사이트를 크롤링하는 것은 내가 사용할 때와 같습니다 = =, 상상하실 수 있습니다.

보통 가장 먼저 떠오르는 것은 ajax 상호작용인데 ajax는 역동적인 것 같죠? 알겠습니다(∩_∩) 그런 것 같아요. 맞는지는 모르겠습니다:

각 인덱스가 상대적으로 표준화된 스타일이라면 말씀하신 대로 조립하면 됩니다. 쉘 스크립트나 일부 Python 라이브러리를 사용하면 됩니다. 어쨌든 파일이 있는 한 파일을 작동할 수 있으면 충분합니다. 그리고 변수 등이 교체됐는데 렌더링에 문제가 있나요? 스레드 대기 시간을 추가하여 뭔가를 실행할 수 있습니다

그런데 굳이 이렇게까지 할 필요는 없고, 그냥 직접 렌더링한 뒤 순수 정적 웹페이지로 변환해서 출력하면 더 좋지 않을까요? 해보지는 않았지만, unittest와 selenium을 배우던 중 Django의 테스트 웹페이지 출력 결과를 접했고, 이를 순수 HTML로 변환하고, 변수 렌더링도 할 수 있는 내장 함수가 많이 생각났어요. 반대로 토큰을 추가해서 보호하면 전송이 안 될 수도 있는데, 처음 아이디어로 조립하면 사실 굉장히 번거롭습니다.

小葫芦

그냥 정적 페이지를 생성하고 싶다면 이렇게 하면 됩니다
그러나 정적 웹사이트에서는 고려해야 할 사항이 많습니다. 페이징을 예로 들면 데이터의 각 페이지에 대해 정적 페이지를 생성해야 합니다.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿