Django URL 直接指向 HTML 模板

42 投票
6 回答
38595 浏览
提问于 2025-04-16 02:17

我正在学习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

撰写回答