Python Django URL直接指向html模板

Python Django URL直接指向html模板,python,django,Python,Django,学习django和python 完成教程后,只需设置一个新站点。现在,我想添加一些关于我们的、常见问题解答的基本html页面,动态元素非常有限。您是否继续在我的URL.py文件中为每个页面写一行新行?或者他们是不是用一种简洁的方式将所有**.html直接映射到相关的.html文件 一般来说,即使它确实需要一个视图,我也必须为每个页面在url.py文件中写一行新行吗?一种方法是编写一个单独的自定义视图来包装direct\u to\u模板通用视图。包装器可以接受一个参数,并相应地形成模板的名称,并将

学习django和python

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


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

一种方法是编写一个单独的自定义视图来包装
direct\u to\u模板
通用视图。包装器可以接受一个参数,并相应地形成模板的名称,并将其传递给
direct\u to\u 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
url(r'^foo/(?P\w+).html$,'my\u static\u wrapper',name='my\u static\u wrapper'),
定义my_静态_包装(请求,页面名称):
#形成模板名称并调用直接\u到\u模板

尽管如此,我怀疑还有更好的解决方案

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

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

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

查看详细信息。

编写一个url,获取您感兴趣的静态页面

url(r'^(?P<page_name>about|faq|press|whatever)/$', 'myapp.staticpage', name='static-pages')
当然,您需要遵循模板的命名约定,但是可以根据需要扩展此模式

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

如果您使用的是因为
直接到\u模板
,您可以创建一个简单的包装器,直接呈现您自己的模板:

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()),
    # ...
)
从myapp.static.views导入StaticView
urlpatterns=模式(“”,
url(r'^(?P.+\.html)$',StaticView.as_view()),
# ...
)

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

from django.views.generic.base import TemplateView

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

谢谢,这不正是我需要的,但这确实奏效了。(“(.+\.html)$”,direct\u to\u template),Django 1.6:Django.http中没有名为simpleNeed
的模块在路由器(
url.py
)中导入Http404
)太好了,是第一个表示“多字符”的点,第二个(转义)点用于分隔文件名和html类型?@Timo,如果你问url regex;+表示文件slug(不带文件扩展名),并且\.html强制URL和文件本身必须为.html文件。硬编码。如果您只想将单个页面直接呈现为视图,而不需要额外的上下文,这是最简单的方法!我认为这个答案应该被接受。
from django.views.generic.base import TemplateView

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