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