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 (когда-нибудь его можно будет переместить в отдельное РЕПО).

таким образом, в этом случае вы получаете следующий рабочий процесс сборки:

  1. запустите client app sources watcher для восстановления скриптов / стилей / шаблонов (brunch watch, grunt работа или gulp смотрим задач)
  2. собирать статические с django для производства
  3. убедитесь, что у вас есть исправление 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>