Django直接使用html模板

时间:2010-08-04 04:58:22

标签: python django

学习django&蟒。

在完成教程后,只需设置一个新网站即可。现在为了论证,我想添加一堆关于我们,常见问题解答基本的html页面,动态元素非常有限,你是否继续在我的urls.py文件中为每个页面写一个新行?或者是他们用一些简洁的方式将所有* * .html直接映射到相关的.html文件?

一般来说,即使它确实需要视图,我还必须在url.py文件中为每个页面写一个新行吗?

5 个答案:

答案 0 :(得分:25)

只要URL中有一些唯一标识部分,您就不需要在urls.py中为每个直接模板网址创建一个条目。

例如,您可以说所有以“.html”结尾的网址都是引用模板中的直接文件。

urlpatterns = patterns('django.views.generic.simple',
    (r'(.+\.html)$', 'direct_to_template'),
    # ...
)

请查看http://docs.djangoproject.com/en/1.2/ref/generic-views/#django-views-generic-simple-direct-to-template了解详情。

答案 1 :(得分:15)

目前,最好的方法是使用基于类的通用视图中的TemplateView:

from django.views.generic.base import TemplateView

url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),

答案 2 :(得分:12)

写一个抓取您感兴趣的静态页面的网址

url(r'^(?P<page_name>about|faq|press|whatever)/$', 'myapp.staticpage', name='static-pages')

staticpage

中的myapp查看功能
from django.views.generic.simple import direct_to_template
from django.http import Http404

def staticpage(request, page_name):
    # Use some exception handling, just to be safe
    try:
        return direct_to_template(request, '%s.html' % (page_name, ))
    except TemplateDoesNotExist:
        raise Http404

当然,您需要遵循模板的命名约定,但可以根据需要扩展此模式。

这比.+\.html模式更好,因为它会将不存在的模板视为404,而.+\.html如果模板不存在则会导致500错误。

答案 3 :(得分:10)

如果您使用的是class based views,因为direct_to_template已经deprecated,您可以创建一个直接呈现自己模板的简单包装器:

from django.views.generic import TemplateView
from django.template import TemplateDoesNotExist
from django.http import Http404

class StaticView(TemplateView):
    def get(self, request, page, *args, **kwargs):
        self.template_name = page
        response = super(StaticView, self).get(request, *args, **kwargs)
        try:
            return response.render()
        except TemplateDoesNotExist:
            raise Http404()

并在您的路由器中:

from myapp.static.views import StaticView

urlpatterns = patterns('',
    url(r'^(?P<page>.+\.html)$', StaticView.as_view()),
    # ...
)

答案 4 :(得分:1)

执行此操作的一种方法是编写包含direct_to_template通用视图的单个自定义视图。包装器可以接受参数并相应地形成模板的名称并将其传递给direct_to_template。这样,您可以使用单个URL配置路由多个页面。

这样的事情:

url(r'^foo/(?P<page_name>\w+).html$', 'my_static_wrapper', name = 'my_static_wrapper'),

def my_static_wrapper(request, page_name):
    # form template name and call direct_to_template

那说我怀疑那里有更好的解决方案。