Django служит статическим индексом.html с видом на ' / ' url
у меня есть индекс.html в папке/ static/. Мое приложение django работает нормально, когда я пытаюсь:
http://127.0.0.1:8000/index.html
но я хочу получить индекс доступа.html по url:
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:Джанго 1.5
редактировать:
причина, по которой я разместил индекс.html в static: я хочу сделать приложение django, совместимое с Phonegap, поэтому после правильного кодирования все, что мне нужно сделать, это --> сделать .zip от static папка и загрузить его в Phonegap в качестве мобильного приложения. Легко и чисто.
5 ответов
вы можете служить static/index.html
для развития такой:
if settings.DEBUG:
urlpatterns += url(
r'^$', 'django.contrib.staticfiles.views.serve', kwargs={
'path': 'index.html', 'document_root': settings.STATIC_ROOT}),
но для производства вы должны настроить свой nginx
(или другой сервер frontend) для обслуживания на /
расположение
обновление
Я хочу объяснить случай, который вы должны сделать так. Например, ваше приложение django - это только admin и api view, но клиент взаимодействует с одностраничным приложением (Ember, Angular, whatever). Таким образом, у вашего проекта есть по крайней мере два подпроекты, один с вашим основным приложением django, а второй-клиентское приложение со всеми материалами html/js/css. Очень удобно иметь клиентские скрипты отдельно от бэкэнда django, это позволяет вашим разработчикам делать свою работу и избегать существования django (когда-нибудь его можно будет переместить в отдельное РЕПО).
таким образом, в этом случае вы получаете следующий рабочий процесс сборки:
- запустите client app sources watcher для восстановления скриптов / стилей / шаблонов (
brunch watch
,grunt
работа илиgulp
смотрим задач) - собирать статические с django для производства
- убедитесь, что у вас есть исправление urlpatterns для разработок и правильная конфигурация nginx для производства
вот мой 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-код on /
на ответ (или расширенный как блоге). Однако одного этого решения может быть недостаточно, если вы хотите иметь полноценный спа-центр, обслуживаемый Django (потому что вам нужна маршрутизация frontend).
я играл с различными методами маршрутизации /static/
to /
, переадресация всех запросов на интерфейс, поиск .HTML-код файлы. В в конце я нашел лучший способ решить все это не путем настройки urls.py, но как расширение WhiteNoise которое я выпустил как Джанго-спа (инструкции по установке в README).
вы можете найти некоторые из связанных обсуждений в этом WhiteNoise вопрос.
вы можете создать каталог шаблонов, поместить туда html, а затем отобразить его из views.py
def index(request):
return render(request, 'my_app/index.html', context={})
Не забудьте установить templates_dir в settings.py
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,
...
просто оберните статический 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>