django全新。
在我的settings.py文件中,我有:
STATIC_URL = '/static/'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
我的urls.py有
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index)
]
我的views.py有
def index(request):
return render(request, 'index.html', {})
最后,我在index.html中有以下内容:
{% load static %}
<link href="{% static 'styles/custom.css' %}" rel="stylesheet">
HTML文件加载如显示,但样式没有显示。在检查时,它说没有找到CSS文件。
这是我的目录结构:
.
├── README.md
├── app
│ ├── __init__.py
│ ├── db.sqlite3
│ ├── manage.py
│ ├── models.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── db.sqlite3
├── static
│ ├── scripts
│ │ └── custom.js
│ └── styles
│ └── custom.css
└── templates
└── index.html
答案 0 :(得分:2)
你必须告诉Django在哪里找到静态文件。这是通过在 settings.py 模块上设置STATICFILES_DIRS来完成的。
通常我们使用BASE_DIR
:
<强> settings.py 强>
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
一开始有点令人困惑,因为Django有三种类似的配置:
STATIC_URL
STATIC_ROOT
STATICFILES_DIRS
基本上,STATIC_URL
将用于生成提供静态资产的网址。它可能是一个像你一样的相对URL:
STATIC_URL='/static/'
{% static 'styles/custom.css' %} => /static/styles/custom.css
它可以是完整的网址:
STATIC_URL='https://static.yourdomain.com/'
{% static 'styles/custom.css' %} => https://static.yourdomain.com/styles/custom.css
现在,STATICFILES_DIRS
是Django将找到静态文件的地方。它通常位于项目文件夹中。但!这不是Django将为您的静态资产提供到客户端的地方。就像,静态文件的来源。
那是因为Django并不真正提供这种文件( .js , .css , .jpg )。嗯,无论如何不是默认的。您可以使用WhiteNoise等第三方应用。
这也是我们拥有STATIC_ROOT
的原因,即告诉Django 从STATICFILES_DIRS
复制这些文件的位置,以便其他人可以为我提供。这个人通常是Apache或NGINX。
我们只使用STATIC_ROOT
进行部署。
当我们将Django应用程序部署到生产服务器时,我们通常运行命令python manage.py collectstatic
。这就是Django将文件从STATICFILES_DIRS
复制到STATIC_ROOT
的地方。
但是在开发阶段你并不需要关心这么多细节,因为在DEBUG=True
时,Django会让你更容易并提供静态文件。
答案 1 :(得分:0)
将这些添加到您的settings.py
STATIC_URL ='/ static /'
MEDIA_URL ='/ media /'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static_in_env')]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(VENV_PATH,'static_root')
MEDIA_ROOT = os.path.join(VENV_PATH,'media_root')
答案 2 :(得分:0)
这是settings.py代码:
lol = [['filiabus', 'filia +N +Abl +Sg', 'filia +N +Dat +Sg'],
['canēs', 'canis +N +Acc +Pl', 'canis +N +Abl +Pl']]
def transform(sublist):
first, *others = sublist
return [first, *(item.split() for item in others)]
out = [transform(sublist) for sublist in lol]
print(out)
# [['filiabus', ['filia', '+N', '+Abl', '+Sg'], ['filia', '+N', '+Dat', '+Sg']],
# ['canēs', ['canis', '+N', '+Acc', '+Pl'], ['canis', '+N', '+Abl', '+Pl']]]