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 中过滤 Queryset 并设计正确的 urls.py 和模板