Django - 直接从 urls.py 渲染 HTML 模板

Posted

技术标签:

【中文标题】Django - 直接从 urls.py 渲染 HTML 模板【英文标题】:Django - render HTML template straight from urls.py 【发布时间】:2014-10-05 19:00:19 【问题描述】:

我有一个Django 应用程序(我还很新,所以我正在尽我最大的努力学习细节),我想让一个 url 端点简单地重定向到另一个文件夹中的静态 html 文件(应用程序)。

我的项目文件层次结构如下:

docs/
 - html/
    - index.html
myapp/
 - urls.py

我的urls.py 看起来像:

from django.conf.urls import patterns, include, url
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^docs/$', RedirectView.as_view(url='/docs/html/index.html')),
)

但是,当我导航到 http://localhost:8000/docs 时,我看到浏览器重定向到 http://localhost:8000/docs/html/index.html,但该页面无法访问。

在这样的重定向中,/docs/html/index.html 是否对 myApp 应用程序不可用?

不胜感激。

【问题讨论】:

我从来没有用 Django 尝试过这个,但在我看来,你不需要任何普通的工具包来制作一个“静态”页面。只需创建一个响应模板的视图,该模板没有任何要处理的上下文。 【参考方案1】:

我很确定 Django 正在寻找与 /docs/html/index.html 匹配的 URL 路由,它不知道提供静态文件,当它找不到路由时显示错误

【讨论】:

这是有道理的。有什么方法可以告诉它你知道它是一个静态文件吗? STATIFILES_DIR 让你设置目录 你也可以使用 TemplateView 作为特定的 url,有很多不同的方法......【参考方案2】:

注意:direct_to_template 自 Django 1.5 起已被弃用。采用 TemplateView.as_view 代替。

我认为您想要的是Template View,而不是 RedirectView。你可以这样做:

urls.py

from django.conf.urls import patterns, include, url
from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
    (r'^docs/$', direct_to_template, 
        'template': 'index.html'
    ),
)

只需确保 index.html 的路径位于 TEMPLATE_DIRS 设置中,或者将其放在应用的 templates 文件夹中(This answer 可能会有所帮助)。

【讨论】:

模板视图的死链接。 这会将index.html 解释为 Django 模板,而不是静态 HTML 文件。

以上是关于Django - 直接从 urls.py 渲染 HTML 模板的主要内容,如果未能解决你的问题,请参考以下文章

Django整理1

Django 路由 urls.py

django-view层

在 Django 中过滤 Queryset 并设计正确的 urls.py 和模板

将一个变量(一个标志)从 urls.py 传递给 django 中的 views.py

url路由配置及渲染方式