Django直接使用html模板

Der*_*gan 33 python django

学习django和python.

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

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

Pet*_*ers 26

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

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

urlpatterns = patterns('django.views.generic.simple',
    (r'(.+\.html)$', 'direct_to_template'),
    # ...
)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看http://docs.djangoproject.com/en/1.2/ref/generic-views/#django-views-generic-simple-direct-to-template.

  • 谢谢,这不是我需要的,但这就是诀窍.('(.+ \.html)$',direct_to_template), (3认同)

Igo*_*kiy 16

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

from django.views.generic.base import TemplateView

url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想将单个页面直接呈现为视图,而没有其他上下文,这是最简单的方法! (2认同)

bri*_*anz 12

写一个抓住你感兴趣的静态页面的网址

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

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
Run Code Online (Sandbox Code Playgroud)

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

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


kir*_*pit 10

如果您因为已弃用使用基于类的视图,则可以创建一个直接呈现自己的模板的简单包装器:direct_to_template

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()
Run Code Online (Sandbox Code Playgroud)

并在你的路由器:

from myapp.static.views import StaticView

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