Шаблоны Django не выполняются в контейнере, и в журналах не отображаются ошибки - PullRequest
0 голосов
/ 30 декабря 2018

Я запускаю django 2.1.3 в контейнере python3 на основе альпийского изображения, я создаю свое собственное изображение, следуя этому руководству: https://docs.docker.com/compose/django/ (с другими проектными работами) на этот раз шаблоны не отображаются, страница, которую я получаю, является отрисовкой вызываемого шаблона, части расширения не существует.

Я пытаюсь запустить код в папке связывания вместо томов Docker и не изменился.

Dockerfile:

FROM python:3-alpine
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /code/
WORKDIR /code/
ADD requirements.txt /
RUN apk update && \
 apk add postgresql-libs && \
 apk add --virtual .build-deps gcc musl-dev postgresql-dev && \
 python3 -m pip install -r /requirements.txt --no-cache-dir && \
 apk --purge del .build-deps 

docker-compose (раздел изображения django):

django:
  build: "./django"
  image: registry.gitlab.com/vaschetto.marco/project-docker-File/django:v0.1
  container_name: Project_django
  restart: always
  command: python3 manage.py runserver 0.0.0.0:8000
  env_file:
    - ./django/.env
  volumes:
    - django:/code/
    - django_static:/code/static/
  depends_on:
    - psql

Структура шаблона:

.
├── db.sqlite3
├── Dockerfile
├── project
...
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── requirements.txt
├── sito #app
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
...
│   ├── models.py
│   ├── __pycache__
...
│   ├── templates
│   │   └── sito
│   │       ├── body.html
│   │       ├── footer.html
│   │       ├── head.html
│   │       └── home.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
└── static

Настройки проекта django (раздел установленных приложений и шаблонов):

...
# Application definition
INSTALLED_APPS = [
  'sito',
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
]
...
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',
            ],
        },
    },
]
...

project / urls.py:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('sito.urls')),
    path('admin/', admin.site.urls),
]

sito / urls.py:

from django.urls import include, path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
]

sito / views.py

from django.shortcuts import render

# Create your views here
def index(request):
    return render(request, "sito/home.html")

sito / templates / sito / home.html:

<!DOCTYPE html>
<html>
        <head>
                {% block head %}
                {% endblock %}
        <head>
        <body>
                {% block body %}
                {% endblock %}
        </body>
        <footer>
                {% block footer %}
                {% endblock %}
        </footer>
</html>

sito / templates / sito / head.html:

{% extends "sito/home.html" %}
{% block head %}
<title>
        This is the title WEBISTE!
<title>
{% endblock %}

sito / templates / sito / body.html:

{% extends "sito/home.html" %}
{% block body %}
        <h1>WEB SITE BODY!</h1>
{% endblock %}

sito / templates / sito / footer.html:

{% extends "sito/home.html" %}
{% block footer %}
        <h2>THIS IS THE FOOTER</h2>
{% endblock %}

результат, который я ожидаю, выглядит следующим образом:

<!DOCTYPE html>
<html>
        <head>
            <title>
                This is the title WEBISTE!
            <title>
        <head>
        <body>
            <h1>WEB SITE BODY!</h1>
        </body>
        <footer>
            <h2>THIS IS THE FOOTER</h2>
        </footer>
</html>

носделать возвратэто страница:

<!DOCTYPE html>
<html>
        <head>

        <head>
        <body>

        </body>
        <footer>

        </footer>
</html>

1 Ответ

0 голосов
/ 30 декабря 2018

Ваша HTML шаблонизирующая часть концептуально неверна.Вы просите, чтобы home.html имел заполнители для содержимого.Вы должны заполнить эти заполнители, расширив шаблон и переопределив их перед рендерингом, так как вы не переопределили их, они остаются пустыми, поэтому вы видите пустые блоки html.Вы определили верхний и нижний колонтитулы, никогда не используя их внутри шаблона.Попробуйте подход ниже, вы можете расширить, как вы хотите, после того, как правильно поняли.Это довольно просто.

  • header.html => только содержимое заголовка
  • footer.html => только содержимое нижнего колонтитула
  • base.html => определить структуруhtml-страницу, включите верхний и нижний колонтитулы здесь
  • home.html => выходит из base.html и переопределяет block body

    ====== sito/header.html =======
    <title>
        This is the title WEBISTE!
    </title>
    
    ====== sito/footer.html =======
    <h2>THIS IS THE FOOTER</h2>
    
    
    ====== sito/base.html =======
    <!DOCTYPE html>
    <html>
        <head>
            {% include "sito/header.html" %}
        <head>
        <body>
            {% block body %}
            {% endblock %}
            <footer>
                {% include "sito/footer.html" %}
            </footer>
        </body>
    </html>
    

Теперь вы можете создавать HTML-шаблоны, расширяя base.html

    ====== sito/home.html =======
    {% extends "sito/base.html" %}
    {% block body %}
        <h1>WEB SITE BODY!</h1>
    {% endblock %}

    ====== sito/about.html =======
    {% extends "sito/base.html" %}
    {% block body %}
        <h1>This is About us</h1>
    {% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...