Когда личный проект развертывается на сервере Ubuntu (16.04), команда (python manage.py runserver 0.0.0.0:8000) может использоваться для доступа к проекту на веб-странице, но статический файл не загружается , Однако при запуске с командой (uwigs) ошибка была объявлена недоступной.
(Я не знаю, если это проблема с сетью, загруженное изображение не может быть отображено, поэтому я использовал код вместо этого, я надеюсь, что вы можете понять мою проблему и помочь мне, спасибо)
Описание проекта: (django2.1 , python3)
xfz(Project structure)
apps
news
migrations
templatetags
__init__.py
news_filters.py
__init__.py
front
xfz
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 修改templates的路径;
'DIRS': [os.path.join(BASE_DIR, 'front','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标签;
'builtins': [
'django.templatetags.static'
],
},
},
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'front','static_dist')
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'front','dist'),
]
news_filter: (пользовательский фильтр времени)
# news_filters.py
# encoding: utf-8
from django import template
from datetime import datetime
from django.utils.timezone import now as now_func,localtime
register = template.Library()
@register.filter
def time_since(value):
if not isinstance(value,datetime):
return value
now = now_func()
# timedelay.total_seconds
timestamp = (now - value).total_seconds()
if timestamp < 60:
return '刚刚'
elif timestamp >= 60 and timestamp < 60*60:
minutes = int(timestamp/60)
return '%s分钟前' % minutes
elif timestamp >= 60*60 and timestamp < 60*60*24:
hours = int(timestamp/60/60)
return '%s小时前' % hours
elif timestamp >= 60*60*24 and timestamp < 60*60*24*30:
days = int(timestamp/60/60/24)
return '%s天前' % days
else:
return value.strftime("%Y/%m/%d %H:%M")
# 后台轮播图列表所引用的时间格式;
@register.filter
def time_format(value):
if not isinstance(value,datetime):
return value
# 使用localtime转化为当地时间;
return localtime(value).strftime("%Y/%m/%d %H:%M:%S")
ubuntu_server (uwsgi + Nginx):
# uwsgi Configuration
[uwsgi]
# 项目的路径
chdir = /srv/xfz
# django的wsgi文件
module = xfz.wsgi
# python虚拟环境的路径
home = /root/.virtualenvs/django-env-py3
# socket文件路径
socket = /srv/xfz/xfz.sock
# 设置socket的权限
chmod-socket = 666
# 退出时是否清理环境
vacuum = true
------Dividing line------
# nginx Configuration
upstream xfz{
server unix:///srv/xfz/xfz.sock;
}
# 配置服务器
server{
# 监听的端口号
listen 80;
# 域名
server_name 192.168.164.128;
charset utf-8;
# 文件最大上传限度
client_max_body_size 75M;
# 静态文件访问的url
location /static{
# 静态文件地址
alias /srv/xfz/front/static_dist;
}
# 发送非静态文件请求到django服务器
location / {
uwsgi_pass xfz;
# uwsgi_params 文件地址
include /etc/nginx/uwsgi_params;
}
}
enter code here
Когда я запускаю команду в Xshell:
# The web page can be opened normally, but the static file is not loaded.
(django-env-py3) root@li:/srv/xfz# python manage.py runserver 0.0.0.0:8000
Запустить командную страницу uwsgi, чтобы сообщить об ошибке
(django-env-py3) root@li:/srv/xfz# uwsgi --ini xfz_uwsgi.ini
Сообщения об ошибках:
# http://192.168.164.128/
TemplateSyntaxError at /
'news_filters' is not a registered tag library.
Я использовал несколько методов, в настройках добавил «библиотеки», но после запуска команды uwsgi страница отображается некорректно.
TEMPLATES = [
{
--snip--
# 配置模板的static标签;
'builtins': [
'django.templatetags.static'
],
'libraries':{
'news_filters': 'apps.news.templatetags.news_filters',
'payinfo_filters': 'apps.payinfo.templatetags.payinfo_filters'
}
},
},
]
Сообщение об ошибке
# http://192.168.164.128/
InvalidTemplateLibrary at /
Invalid template library specified. ImportError raised when trying to load 'apps.news.templatetags.news_filters': No module named 'apps.news.templatetags'
Я не знаю, можете ли вы понять мою проблему. Пожалуйста, помогите мне, если можете. Спасибо.