Django URL 直接指向 HTML 模板
我正在学习Django和Python。
刚刚按照教程搭建了一个新网站。假设我想添加一些关于我们的页面、常见问题页面等基本的HTML页面,这些页面的动态元素非常有限。请问我是否需要在urls.py文件中为每个页面都写一行新的代码?还是说有没有什么简单的方法,可以直接把所有的*.html文件映射到相应的.html文件?
一般来说,即使需要一个视图,我是否也必须为每个页面在urls.py文件中写一行新的代码呢?
6 个回答
12
写一个网址,用来获取你感兴趣的静态页面
url(r'^(?P<page_name>about|faq|press|whatever)/$', 'myapp.staticpage', name='static-pages')
在myapp
里有一个叫staticpage
的视图函数
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错误。
30
现在,做这个的最好方法是使用通用类视图中的TemplateView。
from django.urls import path
from django.views.generic.base import TemplateView
path(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
27
只要在网址中有一些独特的标识部分,你就不需要在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。