Подтвердить что ты не робот

Django служит для статического index.html с представлением '/' url

У меня есть мой index.html в/static/папке. Приложение django работает нормально, когда я пытаюсь:

http://127.0.0.1:8000/index.html

Но я хочу, чтобы acces index.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: Django 1.5

ИЗМЕНИТЬ

Причина, по которой я поставил index.html в static: я хочу сделать совместимое с Phonegap приложение django, поэтому после правильного кодирования все, что мне нужно сделать, это → сделать .zip из статической папки и загрузите его в Phonegap в качестве мобильного приложения. Легко и чисто.

4b9b3361

Ответ 1

Вы можете служить 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 файла для / location

UPDATE

Я хочу объяснить, как это сделать. Например, ваше приложение django - это только admin и api view, но клиент взаимодействует с одностраничным приложением (Ember, Angular, что угодно). Таким образом, у вас есть как минимум два подпроекта, один с вашим основным приложением django, а второй - клиентское приложение со всеми материалами html/js/css. Очень удобно иметь клиентские скрипты отдельно от бэкэнда django, это позволяет вашим сторонним разработчикам выполнять свою работу и избегать существования django (когда-нибудь это можно будет переместить в отчетливое репо).

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

  • Запустите средство просмотра источников клиентских приложений, чтобы перестроить ваши скрипты/стили/шаблоны (brunch watch, grunt задание или gulp задача просмотра)
  • Соберите статическую с django для производства
  • Удостоверьтесь, что у вас исправлены ошибки в настройках и правильная конфигурация 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'),
)

Ответ 2

В этом случае вам не нужен подкласс TemplateView. Вы можете использовать TemplateView непосредственно в URL-адресе url, если index.html находится в вашем каталоге шаблонов.

from django.views.generic.base import TemplateView

urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name='index.html'), name="home"),
]

Ответ 3

Посмотрите мое длинное объяснение того, как обслуживать index.html на / в этом ответе (или расширен как сообщение в блоге). Однако это решение может оказаться недостаточным, если вы хотите иметь полноценный SPA, обслуживаемый Django (потому что вам нужна внешняя маршрутизация).

Я играл с различными методами маршрутизации /static/ до /, пересылая все запросы в интерфейс, находя файлы index.html. В конце концов, я нашел лучший способ решить все это не путем настройки urls.py, а как расширение WhiteNoise, которое я выпустил как django-spa (инструкции по установке в README).

Вы можете найти некоторые из связанных вопросов в этой проблеме WhiteNoise.

Ответ 4

вы можете создать каталог шаблонов, поместить 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,
    ...