Как вернуть статический HTML-файл как ответ в Django?

Я не понял, как я могу представить сайт с чистым HTML-кодом и / или HTML + JavaScript + CSS.

Я попытался загрузить HTML-файл, который просто говорит: Hello World.

Я знаю, что могу сделать это и с Django, но позже я хочу отобразить свой сайт с помощью CSS+JavaScript+HTML.

В файле views я запускаю этот код:

# Create your views here.
from django.http import HttpResponse
from django.template import Context, loader

def index(request):
    template = loader.get_template("app/index.html")
    return HttpResponse(template.render)

Но единственное, что показывает веб-сайт:

>

4 ответа

Решение

Вы не звоните render метод есть, а ты?

Для сравнения:

template.render

template.render()

Если ваш файл не шаблон django, а простой HTML-файл, это самый простой способ:

from django.shortcuts import render_to_response

def index (request):
    return render_to_response('app/index.html')

Если ваши CSS и JS-файлы являются статическими, не используйте Django для их обслуживания и не используйте их как статические файлы.

Для вашего html вы можете сделать то же самое, если это просто какой-то фиксированный файл, который не будет иметь динамического содержимого. Вы также можете использовать общие представления с TemplateView, просто добавьте такую ​​строку в ваш urls.py:

    url(r'^path/to/url', TemplateView.as_view(template_name='index.html')),

Используя HttpResponse Вы можете отправлять только данные, если вы хотите HTML-файл, то вы должны использовать render или же render_to_response следующими способами...

from django.shortcuts import render

def index(request):    
    return render(request, 'app/index.html')

или же

from django.shortcuts import render_to_response

def index (request):
    return render_to_response('app/index.html')

Во-первых, вам нужно сделать некоторые настройки для шаблонов:

Создайте папку "templates" в корневом каталоге, где manage.py находится после того, как вы создали свой проект. Затем перейдите в settings.py, в разделе ШАБЛОНЫ введите каталог с папкой шаблонов. Жесткое кодирование не рекомендуется, потому что если вы отправите свой проект своему другу, ваш друг не сможет его запустить. Должно быть так:

TEMPLATES = [
 {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,"templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Предполагая, что у вас есть home.html и about.html в папке шаблонов:

urls.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('about/',views.aboutview),
    path('',views.homeview),
]

views.py

from django.http import HttpResponse
from django.shortcuts import render

def aboutview(request):
  return render(request,"home.html")
def homeview(request):
  return render(request,"about.html")
from django.http import HttpResponse

from django.template import loader

def index(request):

    template=loader.get_template('app/index.html')

    return HttpResponse(template)
Другие вопросы по тегам