在Django中创建模板子目录的视图

时间:2012-02-15 04:00:12

标签: django django-templates django-class-based-views

我想创建一个TemplateView,显示特定目录下的所有模板。

所以例如我有

/staticpages/about-me.html
/staticpages/about-you.html
/staticpages/about-us.html

...

(更多)

在我的urls.py中 ..

url(r'^(?P<page_name>[-\w]+)/$', StaticPageView.as_view()),

...

在我的views.py中我有

class StaticPageView(TemplateView):
    def get_template_names(self):
        return 'staticpages/%s' % self.kwargs['page_name']

但是,如果有人访问了url /staticpages/blahblah.html(不存在),则此视图会接受它,并且会生成未找到模板的错误。如果找不到模板,我可以重定向到404吗?

或者还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用项目设置,它将为您提供模板目录。然后,您可以使用os.listdir(http://docs.python.org/library/os.html#os.listdir)列出该目录中存在的所有模板。这是人们如何实现它。 (以下代码未经过测试..只是为了给你一个想法)

模板列表可以这样显示:

# views.py
import os
from django.conf import settings

template_directory = os.path.join(settings.TEMPLATE_DIRS,'sub_directory')
templates = os.listdir(template_directory)
return render_to_response('template_list.html')

相应的模板文件..

# template_list.html
<ul>
{% for template in templates %}
  <li> <a href="/{{template}}"> {{template.filename}} </a> </li>
{% endfor %}
</ul>

希望有所帮助..