Создайте представление для подкаталога шаблонов в Django - PullRequest
0 голосов
/ 15 февраля 2012

Я хотел бы создать 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 голосов
/ 15 февраля 2012

Вы можете использовать настройки проекта, которые предоставят вам каталог шаблонов. Затем вы можете использовать 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>

Надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...