我想在django中总是运行debug=false。但是,只有当我将debug设置为true时,它才能工作。否则就不行。在setting.py
DEBUG = False
此外,在setting.py
STATIC_URL = '/static/'
STATIC_ROOT = '/static/'
MEDIA_URL = '/media/'
if DEBUG:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
主页urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('mysite.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我在manage py所在的目录中有媒体、静态、静态文件的目录。
如果我把代码完全放在Apache中,我的代码就能工作。P.S在开发中,我也想修复调试为假总是。
1条答案
按热度按时间w41d8nur1#
Apache和静态/媒体文件
你是通过Apache和mod_wsgi运行所有东西吗?如果是这样,请确保设置Apache***conf***文件以适当地处理“static”别名,这样做后,您应该会发现,一旦运行
python manage.py collectstatic
,您的设置就可以正常工作了。(例如,假设您将项目托管在 /var/www/myproject/ 中,如下所示):如果您的图像在您的媒体目录中,您可能需要对'media'执行同样的操作。
开发服务器和静态/媒体文件
如果您仍在运行开发服务器(即
python manage.py runserver
),并且您正在使用DEBUG = False
执行此操作,那么您将遇到处理静态文件和媒体文件的问题。然而,你可以通过运行
python manage.py runserver --insecure
来解决这些问题,但要注意的是,这并不理想,并且与稳定的生产环境相反- Django并不打算在生产环境中提供这些文件。最后提示:
如果您遇到这种麻烦是因为您想要一个开发服务器和一个生产服务器具有不同的DEBUG值(即在开发中为True,在生产中为False),一个简单的解决方法是使用
django-environ
包和一个.env文件,将其从版本控制中排除,然后在.env文件中设置DEBUG值。然后,您将拥有一个一致的settings.py文件,该文件能够在开发中返回DEBUG=True,在生产中返回DEBUG=False。这个包的链接在这里:https://django-environ.readthedocs.io/en/latest/