Index.htmlは/ static /フォルダーにあります。私の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なしで私がやりたいことをする方法があると思います。
助言がありますか?ありがとう。 My Djangoバージョンは:Django 1.5
[〜#〜] edit [〜#〜]:
Index.htmlを静的に配置した理由:Phonegap互換性のあるDjango appにしたいので、適切なコーディングの後、私がしなければならないのは-> make .Zip from staticフォルダーをモバイルアプリとしてPhonegapにアップロードします。
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
ファイル/
場所
[〜#〜] update [〜#〜]
このようにするべきケースを説明したいと思います。たとえば、あなたのDjangoアプリはadminおよびapiビューのみですが、クライアントは単一ページのアプリ(Ember、Angularなど)と対話します。したがって、プロジェクトには少なくとも2つのサブプロジェクトがあり、1つはメインDjango appで、2つ目はすべてのhtml/js/cssを備えたクライアントアプリです。クライアントスクリプトをDjangoバックエンド、フロントエンド開発者が自分の仕事をしてDjangoの存在を回避できるようにします(いつかは別個のリポジトリに移動できます)。
したがって、この場合、次のビルドワークフローを取得します。
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'),
)
この場合、TemplateView
をサブクラス化する必要はありません。 TemplateView
をURL confで直接使用できますが、index.html
はテンプレートディレクトリにあります。
from Django.views.generic.base import TemplateView
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='index.html'), name="home"),
]
テンプレートHTMLファイルで定義されたiframeで静的HTMLファイルをラップするだけです。スタイルによっては、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>
テンプレートディレクトリを作成し、そこにhtmlを配置して、views.pyからレンダリングできます。
def index(request):
return render(request, 'my_app/index.html', context={})
settings.pyでtemplates_dirを設定することを忘れないでください
BASE_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,
...
提供方法についての長い説明をご覧くださいindex.html on /
in this answer (またはa ブログ投稿 )。ただし、Django(フロントエンドルーティングが必要なため)によって提供される本格的なSPAを使用する場合は、このソリューションだけでは不十分な場合があります。
/static/
を/
にルーティングし、すべてのリクエストをフロントエンドに転送し、index.htmlファイルを見つけるためのさまざまな方法で遊んでいます。最終的に、これをすべて解決する最良の方法は、rls.pyを調整することではなく、 Django-spa (READMEのインストール手順)。
関連する議論のいくつかは、この WhiteNoiseの問題 にあります。