我在/ static /文件夹中有我的index.html。我尝试时,我的django应用程序正常运行:
http://127.0.0.1:8000/index.html
但我想通过url访问index.html:
http://127.0.0.1:8000/
我写了一个视图并且有效:
class IndexView(TemplateView):
template_name = 'index.html'
我还添加到了urls.py(这让我可以像http://127.0.0.1:8000/css/style.css
一样提供静态服务):
url(r'^(?P<path>.*)$', 'django.contrib.staticfiles.views.serve', {
'document_root': settings.STATIC_ROOT, 'show_indexes':True
}),
但我认为有一种方法可以在没有TemplateView的情况下做我想做的事。
有什么建议吗?谢谢。我的django版本是: Django 1.5
修改:
我将index.html放入静态的原因:我想制作与Phonegap兼容的django应用程序,所以在正确编码后,我所要做的就是 - &gt; 从静态文件夹制作.zip,并将其作为移动应用程序上传到Phonegap。简单干净。
答案 0 :(得分:47)
您可以按照以下方式为static/index.html
提供服务:
if settings.DEBUG:
urlpatterns += url(
r'^$', 'django.contrib.staticfiles.views.serve', kwargs={
'path': 'index.html', 'document_root': settings.STATIC_ROOT}),
但是对于制作,您应该将nginx
(或其他前端服务器)配置为index.html
位置提供/
文件
<强>更新强>
我想解释一下你应该这样做的情况。例如,您的django应用程序仅是admin和api视图,但客户端与单个页面应用程序(Ember,Angular,无论如何)进行交互。所以你的项目至少有两个子项目,一个用你的主django应用程序,第二个是一个带有所有html / js / css东西的客户端应用程序。将客户端脚本与django后端分开是非常方便的,它允许你的前端开发人员完成他们的工作并避免django存在(有一天它可以移动到不同的repo)。
因此,在这种情况下,您将获得以下构建工作流程:
brunch watch
,grunt
作业或gulp
观看任务)这是我的urls.py
示例
urlpatterns += patterns(
'django.contrib.staticfiles.views',
url(r'^(?:index.html)?$', 'serve', kwargs={'path': 'index.html'}),
url(r'^(?P<path>(?:js|css|img)/.*)$', 'serve'),
)
答案 1 :(得分:39)
在这种情况下,您不需要继承TemplateView
。只要TemplateView
位于您的模板目录中,您就可以直接在您的网址中使用index.html
。
from django.views.generic.base import TemplateView
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'), name="home"),
]
答案 2 :(得分:1)
将静态HTML文件包装在模板化HTML文件中定义的iframe中。通过一些样式调整可以使iframe 100%宽度和高度。
{% load static %}
<html>
<head>
<title>Templated HTML</title>
<style>
html, body {
width: 100%;
width: 100%;
margin: 0;
padding: 0;
border-width: 0;
}
iframe {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
margin: 0;
padding: 0;
border-width: 0;
}
</style>
</head>
<body>
{{ content }}
<iframe src="{% static 'main/html/test.html' %}"></iframe>
</body>
</html>
答案 3 :(得分:0)
查看我在this answer /
上{或blog post的/static/
提供 index.html 的详细说明。但是,如果你想拥有一个由Django提供服务的完整SPA(因为你需要前端路由),那么这个解决方案可能还不够。
我一直在使用不同的方法将/
路由到orWhere
,将所有请求转发到前端,找到 index.html 文件。最后我发现解决所有问题的最佳方法不是通过调整 urls.py ,而是作为我发布为django-spa的WhiteNoise的扩展(README中的安装说明)
您可以在此WhiteNoise issue找到一些相关的讨论。
答案 4 :(得分:0)
你可以创建模板目录,把html放在那里然后从views.py
渲染它 def index(request):
return render(request, 'my_app/index.html', context={})
别忘了在settings.py
中设置templates_dirBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES_DIR = os.path.join(BASE_DIR, "templates")
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [TEMPLATES_DIR,],
'APP_DIRS': True,
...