Я не могу загрузить статические файлы в мои шаблоны.Что я делаю неправильно? - PullRequest
1 голос
/ 02 июля 2019

Мне нужно включить css в свои шаблоны, чтобы они лучше выглядели, но, несмотря на добавление статического url и root, я просто не могу загрузить его в свой шаблон. Я прилагаю соответствующий код здесь. Пожалуйста, скажите мне, что я делаю не так. Заранее спасибо.

settings.py

    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    TEMPLATE_DIR = os.path.join(BASE_DIR,'templates')
    STATIC_DIR = os.path.join(BASE_DIR,'static')

    STATIC_URL = '/static/'
    STATIC_ROOT = [STATIC_DIR,],

index.html

<!DOCTYPE html>
{% load staticfiles %}
<html lang="en">
 <head>
<link href="{% static 'css/index.css' %}">
</head>

Ответы [ 5 ]

1 голос
/ 02 июля 2019

settings.py

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'project_name/static')
   ]

index.html

<!DOCTYPE html>
{% load static %}
<html lang="en">
 <head>
<link href="{% static 'css/index.css' %}" rel="stylesheet">
</head>

для получения дополнительной информации проверьте здесь

0 голосов
/ 02 июля 2019

Какую версию Django вы используете? Начиная с 2.0 произошли некоторые изменения, вместо

TEMPLATE_DIR = os.path.join(BASE_DIR,'templates')

есть

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',
        ],
    },
},]

Также проверьте, существует ли ваша статическая папка. И убедитесь, что вы выбрали правильный путь к вашей статической папке (например, я держу эту папку внутри папки шаблона, чтобы мой код выглядел так)

STATIC_URL = '/templates/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "templates/static"),]

И я вижу, что вы не поместили csrf_token в ваш html, поэтому, пожалуйста, добавьте это в ваш html

{% csrf_token %}
0 голосов
/ 02 июля 2019

Нет настроек с именем STATIC_DIR, это должно быть STATICFILES_DIRS и должно быть объявлено так:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'), 
]

STATIC_ROOT = os.path.join(BASE_DIR,'staticroot')  # Static Dir and Static root needs to be different

Что касается обслуживания статических файлов, согласно documentation, если вы добавите django.contrib.staticfiles в INSTALLED_APPS, тогда django будет автоматически служить статическим, когда DEBUG равен True. Но в производстве вам нужно использовать обратный прокси-сервер для статических файлов. Или вы можете использовать whitenoise. Более подробную информацию можно найти в documentation.

0 голосов
/ 02 июля 2019

Изменить базу URL urls.py, как следует

urlpatterns = [
    # your url here
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Также включить тег {% load static %} в свой шаблон

0 голосов
/ 02 июля 2019

для загрузки статических файлов, вам также необходимо добавить статический URL

from django.conf.urls.static import static
from django.conf import settings


urlpatterns = [
    ......
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

добавить их в корневой URL вашего проекта

...